我试图逐行读取标准输入,并使用foo :: String -> Int
类型的函数处理每一行。如果我们不知道我们想要读的行数,或者考虑到第一行上提供了行数,那么有什么方法可以做到吗?
我尝试过的很多东西都会产生毫无意义的错误,比如“解析器错误”。例如
main = do {
getLine <- getContents;
let result = show (foo getLine);
putStrLn (foo result);
}
编辑 Strange,但这不会打印
main = do {
a <- getContents;
putStrLn (show (length a));
}
但是,这确实打印了5。
main = do {
a <- getContents;
putStrLn (show 5);
}
发布于 2015-11-27 02:50:52
这样做的主要例子如下:
main = do
line <- getLine
yourfunction line
main
这将永远占用行,并使用您的函数处理它们,如果您希望它在某个时候停止,只需检查一个命令,例如:
main = do
line <- getLine
let res = yourfunction line
if res == "Exit" then IO () else main
发布于 2015-11-27 02:27:38
您可以使用函数lines
将字符串转换为字符串。然后,在下面的行列表上使用map
foo
。
关于编辑:你的程序打印长度为我工作。尝试输入一个文件,或者-如果以交互方式输入输入-正确终止(通过Ctrl)。
侧边:通常很少见到卷发括号和分号。但这只是风格。
https://stackoverflow.com/questions/33955026
复制