我不断收到错误消息:无法将预期类型“Bool”与实际类型“[t0]”匹配。我正在尝试获取字符串的用户输入,然后以相反的顺序输出许多字符串。
示例输入:
HI1
HI2
示例输出:
HI2
HI1
我的代码:
Back :: Int -> IO()
Back x = do line <- sequence_[getLine|[1..x]]
mapM_ print (reverse line)
要扩展 Vitus 的评论import Control.Monad
,然后
back count = do
lines <- replicateM count getLine
mapM_ putStrLn (reverse lines)
如果这对您不起作用,请说出您收到的错误消息,或给出错误输出的示例。
在这种情况下,我们可以很容易地放弃 do 符号:
back count = mapM_ putStrLn . reverse =<< replicateM count getLine
或者
back count = mapM_ putStrLn =<< liftM reverse (replicateM count getLine)
您可能会或可能不会发现其中任何一个更清楚。
请注意,您的函数名称必须以小写字母开头,例如back
. Back
作为函数名是语法错误。
另请注意,缩进很重要。您问题中 do 块的缩进是错误的;我和 melpomene 的答案中的 do 块是正确缩进的。
back :: Int -> IO ()
back x = do line <- sequence [getLine | _ <- [1 .. x]]
mapM_ putStrLn (reverse line)