0

我不断收到错误消息:无法将预期类型“Bool”与实际类型“[t0]”匹配。我正在尝试获取字符串的用户输入,然后以相反的顺序输出许多字符串。

示例输入:

HI1
HI2

示例输出:

HI2
HI1

我的代码:

    Back :: Int -> IO()
    Back x = do line <- sequence_[getLine|[1..x]]
                     mapM_ print (reverse line)
4

2 回答 2

8

要扩展 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 块是正确缩进的。

于 2013-02-22T12:01:36.820 回答
3
back :: Int -> IO ()
back x = do line <- sequence [getLine | _ <- [1 .. x]]
            mapM_ putStrLn (reverse line)
于 2013-02-22T10:43:35.287 回答