Nic*_*nin 1 haskell naming-conventions category-theory monoids
我正在尝试扩大对Haskell中的符号的理解:
$ : Function Application operator (Allow you to apply arguments over a function)
& : flipped version of Function Application Operator? (&) = flip ($)
<> : associative operator (You'll find it in Semigroups and Monoids)
<$> : function application ($) lifted over a Functor structure
<&> : flipped functor map
<*> : applicative operator
Run Code Online (Sandbox Code Playgroud)
我们可以<>和这个家庭建立联系<*>,<$>,<&>吗?我做的时候只想找一个快速的结论<*>,<$>,<&>是<..>用一个结构相关的东西,但是又是什么结构和关联运营商之间的联系?
这些名称并非来自某些总体概念方案。最好的观察方式是追踪他们的历史:
McBride和Paterson的“ 带效果的应用程序编程”使用圆圈中的星号?作为的二元运算符Applicative(请注意,从理论上讲,选择类似*的表示产品的符号是有原因的)。当Control.Applicative以base为基础(即在base -2.1 / GHC 6.6 / 2006年10月)时,它变为<*>,据我所知,它是最接近ASCII的近似值。
我上面Control.Applicative已经链接过的具有功能的第一个版本<$>和具有效果的Applicative编程的最终版本也提到了它(区别是<$>那里有一个Applicative约束)。选择$和<*>作为fmap运算符的混搭点大概是允许我们编写美观的应用样式表达式(f <$> u <*> v <*> w),该样式表达式可以替代该论文中提到的成语括号(以ASCII表示,看起来像[| f u v w |])。
该Monoid班应运而生的历史是更早基地(它已经存在作为GHC 5.04.2的,一个在Control.Monad.Monoid模块); 但是,直到4.5版(GHC 7.4,2012年初)之前mappend,base中都没有infix版本。具有效果的应用程序编程还提到了monoid,并建议使用带圆圈的加号?作为。的二进制运算符mappend。据我所知道的,<>名称最早是由罗斯·帕特森建议在图书馆的邮件列表线程从2009年,并取得了它的方式进入已经存在的GHC的建议,想必也给爱德华Kmett的半群包,其Data.Semigroup模块最终被base采用。帕特森(Paterson)<>为此选择了一个中性名称,该名称不建议任何特定的monoid(另请参见:为什么用mappendinfix别名<>代替+?)。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |