我试图扩展对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我们能把<>和这个家庭的<*>,<$>,<&>联系起来吗?当我只看<*>,<$>,<&>时,我得出了一个快速的结论,即<..>与结构上的某物有关,但是结构和结合运算符之间的联系是什么呢?
发布于 2019-04-27 12:43:57
这些名字并非出自某种总体的概念计划。看到这一点的最好方法是追踪他们的历史:
Applicative的二进制运算符(请注意,有理论上的原因选择一个表示产品的*-like符号)。当使出 (即基数-2.1/GHC 6.6/2006年10月)时,它变成了<*>,据我所见,这是与之最接近的ASCII。Control.Applicative的第一个版本已经以<$>为特色,我所链接到的带有效果的应用程序设计的最终版本也提到了这一点(但<$>有一个Applicative约束这一点略有不同)。选择$和<*>的混搭作为fmap操作符的目的大概是允许我们编写漂亮的应用样式表达式(f <$> u <*> v <*> w),这些表达式可以作为本文中提到的习语括号(在ASCII中呈现的类似于[| f u v w |])的可接受的替代品。Monoid类在base历史上甚至更早出现(它在GHC5.04.2,模块中就已经存在了);但是,直到4.5版(GHC7.4,2012年初),基中才有一个mappend的infix版本。带有效果的应用程序还提到了一元,并建议使用圆圈加号⊕作为mappend的二进制运算符。据我所知,<>的名字最初是由罗斯·帕特森·巴特森( Ross 在2009年的图书馆邮件列表线程中 )提出的,后来变成了一个现有的GHC提案,大概也变成了套餐,它的Data.Semigroup模块最终被base采用了。帕特森选择了<>,因为它是一个中性的名称,这并不意味着任何特定的单类(请参见:)。https://stackoverflow.com/questions/55879092
复制相似问题