【问题标题】:Symbols in HaskellHaskell 中的符号
【发布时间】:2012-11-19 14:32:39
【问题描述】:

我在理解 Haskell 中的符号时遇到问题:

=<<

如:

-- return the last ten lines of a file
tail10  = drop =<< subtract 10 . length

谁能给我解释一下这是什么意思?

当我学习 Haskell 时,我发现这种情况经常发生,因为我碰到了这些符号之一,我不知道它们的含义或它们是如何工作的。有没有更深入地讨论 Haskell 中的符号而不是函数本身的网站或教程?

【问题讨论】:

  • Haskell 允许您定义自己的中缀运算符,因此您无法在某处真正拥有它们的详尽列表。不过,你可以试试 Hoogle - haskell.org/hoogle/?hoogle=%3D%3C%3C
  • 只是&gt;&gt;=,参数的顺序颠倒了。
  • 在这种情况下,它在(r -&gt;)函数monad中,它在函数之间共享一个参数,其中&gt;&gt;=定义为(f &gt;&gt;= g) x = g (f x) x,因此代码等效于tail10 xs = drop ((subtract 10 . length) xs) xs
  • 但在这种情况下,=&lt;&lt; = concatMap

标签: haskell symbols


【解决方案1】:

Here's a list of the reserved keywords in Haskell。你问的=&lt;&lt;只是一个函数,所以我们可以ask HoogleIt tells us=&lt;&lt; 只是 &gt;&gt;=,其参数颠倒了。 &gt;&gt;= 是一个基本的 monad 函数(“monadic composition”),您可以在很多地方看到它,包括 LYAH

【讨论】:

  • 谢谢gspr,这个关键字列表正是我要找的:D
  • 当/如果 hammar 写下他的评论作为答案,你真的应该接受它。他实际上回答 drop =&lt;&lt; subtract 10 . length 所做的事情,而我避免这样做。
  • 也许“保留关键字”并不是 =>= 和 =>= 是从 Control.Monad 导出的方法(第 13.1 节),=
  • @rickythesk8r:我第一句话中的“这些”是指链接指向的内容,而不是=&lt;&lt; 和朋友。我将进行编辑以使其更清晰。
  • @gspr:我的错误。我将最初的问题误解为 - 释义 - “我不明白 =
猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多