对于所有表现良好的 Monad,以下两种 flatten 实现是否等效?
flatten1 xss = do
xs <- xss
x <- xs
return x
flatten2 xss = do
xs <- xss
xs
最佳答案
是的,它们是相同的。它们被脱糖为
flatten1 xss =
xss >>= \xs -> xs >>= \x -> return x
flatten2 xss = do
xss >>= \xs -> xs
第一个相当于
xss >>= \xs -> xs >>= return
通过 Right identity monad law相当于
xss >>= \xs -> xs
关于haskell - 返回从 monad 中提取的元素;多余的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217876/