当前位置: 首页 > 知识库问答 >
问题:

通过Scalaz找到我的路[重复]

赵才俊
2023-03-14

可能重复:
良好的scalaz介绍

我想了解更多关于Scalaz的知识,一旦Scalaz7被宣布稳定,我可能会使用它来避免重新连接我的大脑。我的问题是Scalaz包含了很多功能。虽然它的大部分是独立于其他部分的,但我想鸟瞰一下Scalaz提供的全局功能以及它是如何组织的。据我所知,Scalaz提供了很多东西,

  • 函数适用Monad特征,
  • 新的monads,例如Valination(编辑:原来它只是一个应用程序)
  • 单声道变压器(OptionTEitherT......)
  • 它在一个T恤s
  • 镜头es
  • 拉链s

除此之外,还有很多隐式转换,以及新的构造函数,例如一些,它们与标准库重叠,但在类型方面表现更好

:type Some(3) // Some[Int]
:type some(3) // Option[Int]

我对这些结构中的大多数都有基本的掌握,但我对任何概念都不流利。

你有什么建议以什么顺序学习这个库,模块之间存在什么逻辑依赖关系?更一般地说,我在哪里可以找到该库的高级概述?

编辑 似乎大多数答案都是针对学习函数式编程的基本组件,比如monads,所以我会尝试更精确。我对Haskell有基本的了解,并且有数学家的背景,所以我的问题与范畴论或基本的函数式编程无关。

我的问题是Scalaz是一个巨大的图书馆。我不知道在哪里可以找到什么,在不同的数据类型上有哪些方法可用或有用。我真正需要的是一个映射,例如,它会告诉我,当我想迭代需要处理的资源时,我可能想考虑迭代者,以及我可以用它做什么样的操作。更像是该库可用功能的全景。

共有3个答案

能修谨
2023-03-14

我发现一些有用的视频:

  • Scalaz概述由Nick Partridge和Jason Zaugg撰写
  • 实用斯卡拉兹 由 克里斯·马歇尔
  • 爱德华·凯梅特的镜头(5部分)
  • 读者 monad by Tony Morris 和 Rúnar Bjarnason
  • Michael Pilquist的State monad
  • Monad transformers by Jordan West

其中大多数都有很棒的幻灯片,如果你是铁杆,那么就不用视频来读。

还要学习阅读Haskell类型签名和浏览Haskell类型目录。

段曦
2023-03-14

我的建议是不要等到你觉得你对库有了高级的理解——只要选择几个工具开始,然后边走边关注概念链接。

< code>Validation(顺便说一下,它实际上并不是一个单子)可能是最好的起点。如果您曾经在标准库中使用< code >任一进行验证,那么< code >验证将会感觉既熟悉又方便。在StackOverflow和其他地方,您会发现很多关于< code >验证的有用讨论。

一旦你熟悉了< code>Validation,你就应该对applicative functor类型类有一个很好的基本理解,这在许多其他环境中都是有用的。

幺半群是另一个很好的起点。它是一个非常简单的类型类(本质上只是一个关联加法运算和一个恒等元素),一旦你理解了它,你就会到处看到幺半群。例如,请参阅这个答案(完全公开:由我提供),它展示了如何使用幺半群来解决一个最初看起来可能不是很幺半群的问题。

Scalaz中还有许多其他方便的小工具,您可以使用它们而无需掌握整个大局。BiFunctor是我的最爱之一-它通过为您提供一种将函数映射到任何一侧的方法,使使用元组变得更加方便:

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> def inc(i: Int) = i + 1
inc: (i: Int)Int

scala> def repeat(n: Int)(s: String) = s * n
repeat: (n: Int)(s: String)String

scala> (inc(_)) <-: (1, "a") :-> repeat(3)
res0: (Int, String) = (2,aaa)

一旦你对这些概念中的一些有了很好的理解,我建议Brent Yorgey的Typelassopedia,它是面向Haskell的,但在给你足够的范畴理论和抽象代数来理解你在Scalaz中找到的大部分东西方面做得非常好。

法玮
2023-03-14

我推荐尤金·横田洋三(Eugene Yokota)在scalaz 7上的优秀系列《学习scalaz》。作者遵循了《向你学习Haskell》的结构。这种方法是系统的,非常具有教育性。

 类似资料:
  • Scalaz 是一个 Scala 库用于函数编程。提供很多纯函数数据结构,定义了一组函数式类,例如 Functor 和 Monad 等。 示例代码: import scalaz._import std.option._, std.list._ // functions and type class instances for Option and Listscala> Apply[Option].

  • 我有一个Django Vue。我正在尝试连接到django频道的js聊天应用程序。 要访问任何聊天室,您只需访问: http://localhost:8080/rooms/"id"/ 我的javascript连接如下所示: 我的consumers.py: 我的routing.py: 我的项目routing.py: 问题是,我无法连接到websocket,我的django服务器说: [失败实例:回溯

  • 我对这个问题做了一些研究,但仍然无法解决。我还在这里搜索了堆栈溢出的其他方法,但到目前为止还没有成功。我试过不带样例,把它移到另一个文件夹,没有效果。结构如下: 主要Java代码 controller.java代码 我跟随本教程学习更多关于JavaFX和XML的知识。

  • 问题内容: 我知道以前已经问过这个问题,并且已经看到了一些答案,但是这个问题更多地是关于我的代码和完成此任务的最佳方法。 我想扫描一个目录,并查看该目录中是否存在任何重复项(通过检查MD5哈希值)。以下是我的代码: 这给了我以下输出: 我的想法是: 1)扫描目录2)将MD5哈希+文件名写入文本文件3)以只读方式打开文本文件4)再次扫描目录并检查文本文件… 我看到这不是一个好方法,而且行不通。“匹配

  • 我试图将我的posts.delete链接到我的index.blade.php,但我一直得到Symfony\Component\Routing\Exc0019\RouteNotFoundExcema 指数刀身php PostLikeController web.php 喜欢php 我检查了我的路线:列表,我发现它在那里 ----------------------------------------

  • 这个命令给出了正确的更新版本,因此我认为JDK安装正确。我需要知道它的位置。如何找到JDK的路径?