【问题标题】:Haskell Monads implementationHaskell Monads 实现
【发布时间】:2016-08-13 13:29:03
【问题描述】:

我最近在阅读Learn you a haskell,我遇到了这样的表达:

[1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch)

这个表达式返回结果

[(1,'a'),(1,'b'),(2,'a'),(2,'b')]

所以我知道列表的一元绑定实现如下

xs >>= f = concatMap f xs

取表达式的前半部分即:

[1,2] >>= \n -> ['a', 'b']

它评估为['a','b','a','b'],据我了解,然后将其输入到函数中:(\ch -> return (n , ch))

我不明白的是如何将列表中的值 1,2 分配给 n,然后编译器如何记录它然后在最后一个函数中将其分配给 n?

【问题讨论】:

  • 在学习材料中省略明确的括号是邪恶的。 太苛刻了?问无数因此而浪费了无数时间的新手。

标签: list haskell syntax lambda monads


【解决方案1】:

前半部分不是你想的那样,括号是这样的:

[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )

【讨论】:

  • 您可能想提一下,这是因为 lambda 表达式总是尽可能向右移动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多