在Haskell中读取字符串

在Haskell中读取字符串,haskell,Haskell,我想读取一系列输入并将其转换为[字符串]。这怎么可能 例如: > Enter a string: foo > Enter a string: bar > Enter a string: ! > The strings you've entered are ["foo", "bar"]. 在这种情况下!是决定输入结束的控制字符。这里有一个类似的示例,取自,这是一个很好的资源 main = do putStrLn "Greetings! What is your n

我想读取一系列输入并将其转换为[字符串]。这怎么可能

例如:

> Enter a string: foo
> Enter a string: bar
> Enter a string: !
> The strings you've entered are ["foo", "bar"].

在这种情况下!是决定输入结束的控制字符。

这里有一个类似的示例,取自,这是一个很好的资源

main = do
   putStrLn "Greetings!  What is your name?"
   inpStr <- getLine
   putStrLn $ "Welcome to Haskell, " ++ inpStr ++ "!"
既然您知道了如何读取字符串并将其打印出来,那么唯一的挑战就是创建一个包含这两个字符串的数组并将其打印出来。提示:尝试show命令

如果您仍然需要帮助,请向我们展示您的尝试,并包括您收到的任何错误消息

readLines :: String -> IO [String]
readLines msg = do
  putStr msg
  line <- getLine
  if line == "!"
    then return []
    else
      do
        lines <- readLines msg
        return (line:lines)


为什么不是一个真正的问题?这么简单是不是?我认为这对新手来说是个典型的问题。@josejuan免责声明,我没有投票关闭Q是的,这是一个新手的典型问题,互联网上到处都是典型演练的noumeros示例,所以这不是一个好问题。做你的家庭作业,要具体,让它与其他人相关,在主题上看到FAQ,非常感谢,@josejuan!我正在学习Haskell,我试着自己思考,但找不到合适的解决方案。正如我所见,你理解我的问题,并给了我一个很好的解决方案:谢谢!不幸的是,我对其他用户的反应感到非常难过:StackOverflow本来应该是一个发布任何编程问题的地方,但它似乎并非一直都是重点-/不幸的是,这个示例只读取一个输入,而不是一个连续的循环。我已经尝试了一些例子,无论如何我都会在这里发布。但是@josejuan已经发布了一个解决我问题的解决方案。感谢您的帮助和建议!:
Prelude> readLines "Enter data: "
Enter data: foo
Enter data: oof
Enter data: fof
Enter data: ofo
Enter data: !
["foo","oof","fof","ofo"]
Prelude>
Prelude> readLines "Enter data: " >>= (\strings -> putStrLn ("The strings you've entered are " ++ show strings))
Enter data: fofo
Enter data: ofof
Enter data: !
The strings you've entered are ["fofo","ofof"]
Prelude>
main = do
    strings <- readLines "Enter data: "
    putStrLn $ "The strings you've entered are " ++ show strings