gpt4 book ai didi

scala - 为什么 Scalaz 使用复杂符号而没有代码内文档?

转载 作者:行者123 更新时间:2023-12-03 10:42:09 25 4
gpt4 key购买 nike

我有时会查看 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 验证似乎是最简单的部分,但之后呢?

最佳答案

我同意 Scalaz 大部分都没有记录。问题是它从 Haskell(和基础数学)中收集了许多高级概念,并且详细记录它们将成为写一本关于函数式编程(和数学)的整本书。所以我相信 Scalaz 的方法是:

  • 如果您知道并需要一些为 Scala 准备的函数式编程概念,您很可能会在这里找到它。
  • 如果你不知道它,你将不得不在其他地方学习。

  • 让我们看看你的例子:如果你知道 Kleisli categories以及每个 monad 是如何产生一个的,这个定义是相当独立的。如果没有,那么 KleisliCategory反正对你没用。

    (根据我的经验,Haskell 更适合从函数式编程中学习高级概念。虽然 Scala 比 Java 好得多,但它仍然拖累了 Java 的 OO/命令式传统,这让事情有点困惑。)

    考虑到 Unicode 符号。查看来源,似乎它们仅用作语法糖,或者至少它们具有非 Unicode 对应物:
    def ☆[M[_], A, B](f: A => M[B]): Kleisli[M, A, B] = kleisli(f)
    def η[F[_]](implicit p: Pure[F]): F[A] = pure
    def cokleisli[W[_], A, B](f: W[A] => B): Cokleisli[W, A, B] = ★(f)

    所以如果你愿意,你可以不用它们。

    不过,我不确定在 Scalaz 中使用它们是否是个好主意。对于缺乏正确字体的人来说,这可能会使代码无法阅读。我更喜欢纯 ASCII 符号。

    关于scala - 为什么 Scalaz 使用复杂符号而没有代码内文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993659/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com