最近,我在阅读“学习你的哈斯克尔”时,偶然发现了这样一句话:
[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?
发布于 2016-08-13 21:34:03
前半部分不是你想的那样,括号是这样的:
[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )https://stackoverflow.com/questions/38933216
复制相似问题