为什么Scalaz中的A => M [A]没有> =>半群?

这是我之前的 question的后续内容

Kleisli定义了两个运算符< =< (撰写)和> => (然后). > =>对我来说看起来很自然,我不明白< =<可能很有用. 而且,看起来没有> =>半群A => M [A]但是< =<半群确实存在. 它背后的理由是什么?

解决方法

在无点和无点样式之间进行平移时,compose(或< =<)更自然一些.例如,如果我们有这些功能

val f: Int => Int = _ + 1
val g: Int => Int = _ * 10

我们得到以下等价物:

scala> (f andThen g)(3) == g(f(3))
res0: Boolean = true

scala> (f compose g)(3) == f(g(3))
res1: Boolean = true

在组成的情况下,f和g在等式的两边具有相同的顺序.

不幸的是,Scala的类型推断经常使得andThen(或> =>)更方便,并且它往往比compose更广泛地使用.因此,这是一个数学约定和Scala类型推理系统的怪癖不一致的情况. Scalaz(考虑到项目的文化,并不太令人惊讶)选择了数学方面.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...