【发布时间】: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