我正在读" 了解你是一个很好的Haskell,我从来不知道如何发音Haskell运算符.他们有"真实"的名字吗??
例如,你如何大声朗读这样的表达?
Just (+3) <*> Just 9
Run Code Online (Sandbox Code Playgroud)
我知道这>>=是"绑定",但其他人呢?由于Google不考虑非字母数字字符,因此很难进行有效的搜索...
我意识到你可以创建自己的运算符,所以当然不是所有运算符都可以有名称,但我希望常见的运算符(例如在Applicative或中定义的运算符Monad)必须具有名称...
你如何在Applicative类型类中发音这些函数:
(<*>) :: f (a -> b) -> f a -> f b
(*>) :: f a -> f b -> f b
(<*) :: f a -> f b -> f a
Run Code Online (Sandbox Code Playgroud)
(也就是说,如果他们不是运营商,他们会被称为什么?)
作为旁注,如果你可以重命名pure为对非数学家更友好的东西,你会怎么称呼它?
之前我曾询问过将monadic代码翻译为仅使用Parsec的applicative functor实例.不幸的是,我得到了几个回复,回答了我真正问过的问题,但并没有给我太多的了解.那么让我再试一次......
总结我到目前为止的知识,一个应用函子比一个monad更受限制.在"少即是多"的传统中,限制代码可以做什么会增加疯狂代码操作的可能性.无论如何,很多人似乎相信使用applicative而不是monad是一种可行的优越解决方案.
在Applicative类的定义中Control.Applicative,它的黑线鳕的上市有益分离类的方法和实用功能与他们之间的类实例的广阔裹,使其很难迅速在屏幕上看到的一切在一次.但相关的类型签名是
pure :: x -> f x
<*> :: f (x -> y) -> f x -> f y
*> :: f x -> f y -> f y
<* :: f x -> f y -> f x
<$> :: (x -> y) -> f x -> f y
<$ :: x -> f y -> f x
Run Code Online (Sandbox Code Playgroud)
做得很完美,对吧?
好吧,Functor已经给了我们fmap,基本上就是这样<$>.即,由于从功能x到y,我们可以映射一个f …
1998年,John Hughes在本文中为Haskell提出了Arrow类型.这个类型类带有许多"非字母数字"的运算符,比如***和&&&.然而,他没有为这些运营商提供明确的名称.
Haskell的Monad类型有类似的事情>>=,发音为bind.
我的问题是如何发音箭头运算符***和&&&.或者他们甚至有明显的名字?Haskellers如何在对话中引用这些运算符?