我正在读" 了解你是一个很好的Haskell,我从来不知道如何发音Haskell运算符.他们有"真实"的名字吗??
例如,你如何大声朗读这样的表达?
Just (+3) <*> Just 9
Run Code Online (Sandbox Code Playgroud)
我知道这>>=是"绑定",但其他人呢?由于Google不考虑非字母数字字符,因此很难进行有效的搜索...
我意识到你可以创建自己的运算符,所以当然不是所有运算符都可以有名称,但我希望常见的运算符(例如在Applicative或中定义的运算符Monad)必须具有名称...
在最近的一个风格问题的答案中,我写道
main = untilM (isCorrect 42) (read `liftM` getLine)
Run Code Online (Sandbox Code Playgroud)
和
isCorrect num guess =
case compare num guess of
EQ -> putStrLn "You Win!" >> return True
...
Run Code Online (Sandbox Code Playgroud)
Martijn帮助提出了替代方案:
main = untilM (isCorrect 42) (read <$> getLine)
EQ -> True <$ putStrLn "You Win!"
Run Code Online (Sandbox Code Playgroud)
使用Control.Applicative中的抽象可以使Haskell代码中的哪些常见模式更清晰?有效使用Control.Applicative时要记住哪些有用的经验法则?
我一直在逐渐学习Haskell,甚至觉得我有一堆monad.然而,仍然有很多我不太理解的异国情调,比如Arrows,Applicative等.虽然我从Haskell代码中找到了点点滴滴,但我找到了一个真正解释的教程会很好他们完全.(似乎有几十个关于monad的教程......但是之后一切似乎都完成了!)
在McBride和Paterson的"有效的应用程序设计"中,他们介绍了一些可爱的语法糖来提升纯粹的功能:
[| f x y z |]
Run Code Online (Sandbox Code Playgroud)
对于
f <$> x <*> y <*> z
Run Code Online (Sandbox Code Playgroud)
我记得别人的地方使用li f w x y z il或il f v w x y z li,我想/希望,也许是因为它可以使用一些现有的语言功能和狡猾的定义来定义li和il.
我无法找到超越纸本的任何参考,并假设[|并|]不太可能在GHC任何时间很快转起来,是有可能实现li并il不知何故?我不能为他们想出一个合理的类型,所以我假设我需要模板Haskell或类似,但不知道几乎足以实现这一点.[af| f x y ]没关系,但我不知道在我开始尝试它之前是否可能,如果确实需要帮助.
我们都喜欢do,而且我很好奇,如果这种替代语法在理论上可能在monad世界之外有用.如果是这样,它会简化哪些其他类型的计算?例如,为Applicative提供相同的东西是否有意义?
我最近一直在使用应用程序(和替代方案),令我感到沮丧的一件事是我缺乏对命名法的了解.作为一个例子,我希望能说function name的,而不是star thing为<*>.因此,与>>=读取的方式大致相同bind,以下是否有更多人性化的名称:
<*> - 申请?<*&*>- 左右适用?<$> - fmap?<|>同样来自箭头
*** - 分裂?&&& - 扇出?如果有这些名称,我的搜索没有发现它们.我知道这些可能没有被接受的条款,但如果有,我很想知道它们.