【发布时间】:2012-10-20 23:40:49
【问题描述】:
我有时在看 Scalaz,发现对于 Scala 初学者来说很难理解。
implicit def KleisliCategory[M[_]: Monad]: Category[({type λ[α, β]=Kleisli[M, α, β]})#λ] = new Category[({type λ[α, β]=Kleisli[M, α, β]})#λ] {
def id[A] = ☆(_ η)
def compose[X, Y, Z](f: Kleisli[M, Y, Z], g: Kleisli[M, X, Y]) = f <=< g
}
implicit def CokleisliCategory[M[_]: Comonad]: Category[({type λ[α, β]=Cokleisli[M, α, β]})#λ] = new Category[({type λ[α, β]=Cokleisli[M, α, β]})#λ] {
def id[A] = ★(_ copure)
def compose[X, Y, Z](f: Cokleisli[M, Y, Z], g: Cokleisli[M, X, Y]) = f =<= g
}
Scalaz 方法对于经验丰富的函数式程序员来说似乎很明显,但对其他人来说却很难理解。
为什么 Scalaz 代码中的文档如此之少?
为什么他们使用这么多对大多数人来说不可读的运算符?
我什至不知道如何在不复制/粘贴的情况下输入★ 或☆。这只是一个例子,因为有很多。
有人说 Scalaz 一开始不可读,但 2 年后他们发现它很棒。 我想知道从哪里开始使用 Scalaz。 Scala 验证似乎是最简单的部分,但在那之后呢?
【问题讨论】:
-
据我所知,大多数特殊符号都有一个冗长的非 unicode 伴侣。 Scalaz 模仿 Haskell,其中许多符号来自 Haskell 领域(所以下一个问题是 why Haskell uses so many symbols)。而且我个人认为 beginner scala 程序员不应该使用 scalaz。
-
@om-nom-nom 我明白了。我说我是 Scala 初学者,这是我的观点,但我正在关注 Coursera 上的 Martin Odersky 课程,阅读这本书,并使用它 3 个月,以构建一个即将投入生产的真实世界 web 应用程序.我只是想知道我什么时候应该尝试使用/理解 Scalaz,因为在我不理解它之前,我会一直认为自己是 Scala 初学者:)
-
scalaz 与 shapeless 处于同一水平,可能下一次在 Scala 中会有一个用于详尽宏编程的库。所有这些部分都在一起,它们不是 Scala 用户核心的一部分——它们是证明什么是可能的以及如何抽象到新级别的实验。可以说他/她是高级 Scala 程序员,但无法理解 Scala 的高阶部分——这也是 Odersky 在他的Scala levels 中所说的。
-
尽管如此,学习 Scala 比学习命令式语言需要更多的时间——如果一个人还没有使用另一种函数式语言的经验的话。就我而言,我认为我在 9 或 10 个月后达到了高级 Scala 程序员水平(并且每天使用 Scala 工作几个小时)——但我之前没有任何函数式编程经验。
-
@om-nom-nom 符号可能有冗长的伴侣,但是当代码使用符号时,那有什么好处。我不是天生就有一个 scalaz 符号来命名映射。你如何从寻找一个符号到弄清楚它应该做什么?我发现克隆 repo 并应用 grep 会有所帮助。