我正在努力掌握Haskell中的do表示法
。
我可以将其与Maybe一起使用,然后打印结果。像这样:
maybeAdd :: Maybe Integer
maybeAdd = do one <- maybe1
two <- maybe2
three <- maybe3
return (one + two + three)
main :: IO ()
main = putStr (show $ fromMaybe 0 maybeAdd)
但是我试图在主函数中使用 Maybe 的 do 表达式而不是单独的函数,但是我没有成功。我尝试过的各种方法包括:
main :: IO ()
main = do one <- maybe1
two <- maybe2
three <- maybe3
putStr (show $ fromMaybe 0 $ return (one + two + three))
main :: IO ()
main = do one <- maybe1
two <- maybe2
three <- maybe3
putStr (show $ fromMaybe 0 $ Just (one + two + three))
main :: IO ()
main = do one <- maybe1
two <- maybe2
three <- maybe3
putStr (show $ (one + two + three))
所有这些都会导致各种类型的编译错误,遗憾的是我没有解密出正确的方法。
我该如何实现上述目标?或许需要解释一下我尝试过的方法为什么是错误的吗?
MaybeT IO ()
。然后你将拥有一个单一的do块。 - Redu