为什么Scalaz中的A => M [A]没有> =>半群?
发布时间:2020-12-16 18:05:47 所属栏目:安全 来源:网络整理
导读:这是我之前的 question的后续内容 Kleisli定义了两个运算符 = (撰写)和 = (然后). =对我来说看起来很自然,我不明白 =可能很有用. 而且,看起来没有 =半群A = M [A]但是 =半群确实存在. 它背后的理由是什么? 解决方法 在无点和无点样式之间进行平移时,compose
这是我之前的
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(考虑到项目的文化,并不太令人惊讶)选择了数学方面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容