我试图通过在 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 Nothing
或 Left (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/