Haskell IO反向字符串输入

时间:2013-02-22 10:25:36

标签: haskell map io sequence

我一直收到错误:无法将预期类型'Bool'与实际类型'[t0]'匹配。我正在尝试获取字符串的用户输入,然后以反向ORDER输出许多字符串。

示例输入:

HI1
HI2

示例输出:

HI2
HI1

我的代码:

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

2 个答案:

答案 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)

您可能会或可能不会发现其中任何一个更清楚。


请注意,您的函数名称必须以小写字母开头,例如backBack作为函数名称是语法错误。

另请注意,缩进很重要。你问题中do块的缩进是错误的;我和melpomene的答案中的do块正确缩进。

答案 1 :(得分:3)

back :: Int -> IO ()
back x = do line <- sequence [getLine | _ <- [1 .. x]]
            mapM_ putStrLn (reverse line)