haskell - MaybeT 的直觉

标签 haskell monad-transformers

我试图通过在 ghci 中运行一些示例来理解 MaybeT:

λ: import Control.Monad.Trans.Maybe
λ: let x = return $ 42 :: MaybeT (Either String) Int
λ: :t x
x :: MaybeT (Either String) Int

然后,我运行了它:

λ: runMaybeT x
Right (Just 42)

请给我值,y,这样

runMaybeT y === Left (Just "...")
runMaybeT y === Left Nothing
runMaybeT y === Right Nothing

最佳答案

你永远不会得到 Left NothingLeft (Just ..),因为这里的 monad 是 Either String ...,所以左边总是有一个String

以下是您可以获得的内容:

> let y = fail "Failed" :: MaybeT (Either String) Int
> runMaybeT y
Right Nothing
> let y = lift (Left "Failed") :: MaybeT (Either String) Int
> runMaybeT y
Left "Failed"

关于haskell - MaybeT 的直觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228540/

相关文章:

haskell - 带堆栈的阴谋沙盒

haskell - 不是类型构造函数的类型级函数示例

haskell - 如何从输入文件流式传输到具有状态的管道

haskell - 没有 monad 转换器的 monad 的显式示例是什么?

haskell - 如果多个 monad 为 "mixed",是否可以利用 Monadic 结构?

scala - 将\/[A, B] 提升到EitherT[Future, A, B]

haskell - 为什么这个解决 "queens"困境的解决方案在 Haskell 中比其他解决方案运行得慢得多?

user-interface - 功能性 GUI 用户在哪里?

haskell - 在 Haskell 中为自定义数据类型创建 Eq 实例

haskell - 我们如何与具有 2 种不同错误类型的 2 个 MonadError 约束交互?