相关疑难解决方法(0)

常见的Haskell运算符是否有明显的名称?

我正在读" 了解你是一个很好的Haskell,我从来不知道如何发音Haskell运算符.他们有"真实"的名字吗??

例如,你如何大声朗读这样的表达?

Just (+3) <*> Just 9
Run Code Online (Sandbox Code Playgroud)

我知道这>>=是"绑定",但其他人呢?由于Google不考虑非字母数字字符,因此很难进行有效的搜索...

我意识到你可以创建自己的运算符,所以当然不是所有运算符都可以有名称,但我希望常见的运算符(例如在Applicative或中定义的运算符Monad)必须具有名称...

haskell operators

196
推荐指数
5
解决办法
1万
查看次数

你如何使用Control.Applicative编写更干净的Haskell?

在最近的一个风格问题的答案中,我写道

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 coding-style

60
推荐指数
3
解决办法
8403
查看次数

在monads之后学习Haskell的下一步是什么?

我一直在逐渐学习Haskell,甚至觉得我有一堆monad.然而,仍然有很多我不太理解的异国情调,比如Arrows,Applicative等.虽然我从Haskell代码中找到了点点滴滴,但我找到了一个真正解释的教程会很好他们完全.(似乎有几十个关于monad的教程......但是之后一切似乎都完成了!)

haskell

33
推荐指数
2
解决办法
3072
查看次数

是否可以使用包围语法糖作为应用函子?

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 ilil f v w x y z li,我想/希望,也许是因为它可以使用一些现有的语言功能和狡猾的定义来定义liil.

我无法找到超越纸本的任何参考,并假设[||]不太可能在GHC任何时间很快转起来,是有可能实现liil不知何故?我不能为他们想出一个合理的类型,所以我假设我需要模板Haskell或类似,但不知道几乎足以实现这一点.[af| f x y ]没关系,但我不知道在我开始尝试它之前是否可能,如果确实需要帮助.

haskell syntactic-sugar applicative template-haskell

20
推荐指数
3
解决办法
914
查看次数

Haskell:除了monad之外,"do"符号对于上下文有用吗?

我们都喜欢do,而且我很好奇,如果这种替代语法在理论上可能在monad世界之外有用.如果是这样,它会简化哪些其他类型的计算?例如,为Applicative提供相同的东西是否有意义?

syntax haskell

10
推荐指数
4
解决办法
1285
查看次数

适用(和朋友)方法是否有人性化的名称?

我最近一直在使用应用程序(和替代方案),令我感到沮丧的一件事是我缺乏对命名法的了解.作为一个例子,我希望能说function name的,而不是star thing<*>.因此,与>>=读取的方式大致相同bind,以下是否有更多人性化的名称:

  • <*> - 申请?
  • <*&*>- 左右适用?
  • <$> - fmap?
  • <|>

同样来自箭头

  • *** - 分裂?
  • &&& - 扇出?

如果有这些名称,我的搜索没有发现它们.我知道这些可能没有被接受的条款,但如果有,我很想知道它们.

haskell naming applicative

9
推荐指数
3
解决办法
510
查看次数