haskell - 返回从 monad 中提取的元素;多余的?

标签 haskell monads do-notation

对于所有表现良好的 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/

相关文章:

haskell - 汇总目录中的文件大小

haskell - 你如何在 Haskell 中创建一个通用的 memoize 函数?

Haskell: 'do [1,2,3]; ["hello"]' 行为说明

haskell - 这个技巧如何进行类型检查?

haskell - ghci 启动时自动调用命令

haskell - Functor -> Applicative -> Monad 层次结构的意义是什么

haskell - 如何在 GHCi shell 中导航目录?

haskell - 具有多个相同变压器的 monad 堆栈

haskell - (>>=) 的执行顺序不是我所期望的

haskell - NCurses 不断更新 moveCursor 中的 x 和 y 坐标