这个家庭中``>`的意思```

问题描述 投票:1回答:2

我正在尝试扩展我对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

我们可以在<>和这个家庭<*>,<$>,<&>之间建立联系吗?当我只看<*>,<$>,<&> <..>与结构上的某些东西有关时,我做了一个快速的结论,但那么结构和关联算子之间的联系是什么?

haskell naming-conventions category-theory monoids
2个回答
8
投票

这些名称并非来自某些总体概念方案。看到这一点的最好方法是追踪他们的历史:

  • McBride和Paterson的Applicative programming with effects在圆圈中使用星号⊛,作为Applicative的二元运算符(请注意there are theoretical reasons选择一个*样符号来表示产品)。当Control.Applicative made it to base(即基地-2.1 / GHC 6.6 / 2006年10月)成为<*>时,据我所知,这是最接近的ASCII近似值。
  • Control.Applicative的第一个版本已经以<$>为特色,应用程序编程的最终版本与我上面链接的效果也提到了它(与<$>有一个Applicative约束的微小差别)。选择$<*>混搭作为fmap运算符的观点可能允许我们编写漂亮的应用样式表达式(f <$> u <*> v <*> w),这些表达式可以替代该论文中提到的成语括号(以ASCII格式呈现,像[| f u v w |])。
  • Monoid类在基地历史上更早出现(它已经存在于GHC 5.04.2,in a Control.Monad.Monoid module);然而,直到版本4.5(GHC 7.4,2012年初),在基础上没有mappend的中缀版本。带有效果的应用程序设计也提到了幺半群,并建议使用带圆圈的加号⊕作为mappend的二元运算符。据我所知,<>的名字最初由Ross Paterson in a Libraries mailing list thread from 2009提出,并且进入了preexisting GHC proposal,并且可能也是Edward Kmett's semigroups package,其Data.Semigroup模块最终被基地采用。帕特森选择<>作为一个中性名称,这不会暗示任何特定的幺半群(参见:Why is the mappend infix alias <> instead of +?)。

1
投票

据我所知,<..>没有一般意义。但是,肯定与其他运营商有一些联系,大多数列出的运营商都有某种助记符含义:

  • $是功能应用:f $ x = f x<$>明显受到$的启发:f $ xf应用于xf <$> xf应用于x内的每个元素。 (就个人而言,<$>是我最喜欢的运营商。)
  • &<&>之间存在同样的关系。
  • <>是幺正附加算子:"x" <> "y" <> "z"Sum 1 <> Sum 2 <> Sum 3。 (编辑:以下可能也可能不正确 - 请参阅下面的编辑以获取更多详细信息。)据我所知,这些确切的字符只是选择看起来不错,尽管可能与在数学中的使用有关代表一些任意的运算符。
  • (这只是猜测 - 请参阅下面的编辑,了解更实用的帐户。) 我认为<*>被选中与<$>有很好的共鸣:f <$> x <*> y <*> z。另外元组也被称为产品类型(例如OCaml代表元组类型,如Int * String,对应于Haskell (Int, String)),因此可能存在应用f $ (x, y, z)的共振(并不是任何人都会这样做而不是普通的f x y zf (x, y, z))。

编辑:事实证明@chepner比我更了解历史 - 感谢评论!在original paper introducing applicative functors中,运营商名称用于应用操作;这是ASCII-fied为<*>。同一篇论文介绍了<$><>也可能受到<*>的启发,因为monoids和applicatives被证明是相关的。令人惊讶的是,所有倾斜的支架确实与彼此相关! (虽然非常间接和非常......)

© www.soinside.com 2019 - 2024. All rights reserved.