Haskell Monad 实现
Haskell Monads implementation
我最近在读 learn you a haskell,我看到了这个表达:
[1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch)
这表示returns结果
[(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?
前半部分不是你想的,括号是这样的:
[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )
我最近在读 learn you a haskell,我看到了这个表达:
[1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch)
这表示returns结果
[(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?
前半部分不是你想的,括号是这样的:
[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )