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