我试图围绕 Monads 进行思考,并觉得如果我能解释为什么它不能编译,我会有更好的理解。
module Main where
import Data.Maybe
import System.Environment
myFunc :: String-> Maybe String
myFunc x = Just x
main :: IO ()
main = myFunc "yo" >>= putStrLn
我得到的错误是
blah.hs:9:10:
Couldn't match type `Maybe' with `IO'
Expected type: IO String
Actual type: Maybe String
In the return type of a call of `myFunc'
In the first argument of `(>>=)', namely `myFunc "yo"'
In the expression: myFunc "yo" >>= putStrLn
我意识到问题在于我正在尝试将 aMaybe
与a 匹配IO
,但我不完全确定如何将 Maybe'd 变量转换为 IO。任何帮助将不胜感激!