在Haskell中逐行阅读

时间:2015-11-27 10:10:01

标签: haskell

我试图逐行读取标准输入,并使用类型foo :: String -> Int的函数处理每一行。有没有办法做到这一点,只要我们不知道我们想读的行数或者假设第一行提供了行数?

我尝试了什么 很多事情都会带来毫无意义的错误,例如"解析器错误"。 例如

main = do {
    getLine <- getContents;
    let result = show (foo getLine);
    putStrLn (foo result);
}

修改 奇怪,但这不会打印出

的长度
main = do {
    a <- getContents;
    putStrLn (show (length a));
}

但是,这确实打印了5。

main = do {
    a <- getContents;
    putStrLn (show 5);
}

2 个答案:

答案 0 :(得分:2)

这样做的主要例子如下:

main = do
    line <- getLine
    yourfunction line
    main

这将永远占用行并使用您的函数处理它们,以防您希望它在某个时间停止,只需检查命令,例如:

main = do
    line <- getLine
    let res = yourfunction line
    if res == "Exit" then IO () else main

答案 1 :(得分:0)

您可以使用函数lines将String转换为[String]。之后map foo通过此行列表。

关于编辑:打印长度的程序适合我。尝试输入文件或 - 如果以交互方式输入输入 - 正确终止(通过Ctrl-d)。

旁注:通常很少看到花括号和分号。但这只是风格。