加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么Scalaz使用复杂符号而不使用代码内文档?

发布时间:2020-12-16 09:29:22 所属栏目:安全 来源:网络整理
导读:我有时会看Scalaz并发现很难理解初学者Scala程序员。 implicit def KleisliCategory[M[_]: Monad]: Category[({type λ[α,β]=Kleisli[M,α,β]})#λ] = new Category[({type λ[α,β]})#λ] { def id[A] = ☆(_ η) def compose[X,Y,Z](f: Kleisli[M,Z],g
我有时会看Scalaz并发现很难理解初学者Scala程序员。

implicit def KleisliCategory[M[_]: Monad]: Category[({type λ[α,β]=Kleisli[M,α,β]})#λ] = new Category[({type λ[α,β]})#λ] {
    def id[A] = ☆(_ η)
    def compose[X,Y,Z](f: Kleisli[M,Z],g: Kleisli[M,X,Y]) = f <=< g
  }

  implicit def CokleisliCategory[M[_]: Comonad]: Category[({type λ[α,β]=Cokleisli[M,β]})#λ] {
    def id[A] = ★(_ copure)
    def compose[X,Z](f: Cokleisli[M,g: Cokleisli[M,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,B] = kleisli(f)
def η[F[_]](implicit p: Pure[F]): F[A] = pure
def cokleisli[W[_],B](f: W[A] => B): Cokleisli[W,B] = ★(f)

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

不过,我不确定在Scalaz中使用它们是不是一个好主意。对于缺乏正确字体的人来说,这可能会使代码无法读取。我宁愿选择纯ASCII符号。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读