所以这个问题更普遍地是关于 Monads(特别是 Fay),但我的例子使用了 IO monad。
我有一个函数,其中输入是字符串列表,我想一个一个地打印每个字符串。所以这是我的想法:
funct :: [String] -> ?
funct strs = do
map putStrLn strs
但不起作用,因为它返回类型 [IO ()]。所以我的问题是,我将如何映射一个列表,并将其视为我正在逐行执行函数,以典型的 do-notation 迭代样式(如下所示)?
funct :: [String] -> IO ()
funct strs = do
putStrLn (strs !! 0)
putStrLn (strs !! 1)
...