是否可以从命令行读取带换行符的字符串

时间:2016-02-15 10:14:07

标签: haskell input

到目前为止,我尝试过3种语言:Haskell,Python,Java。

我有点不知所措。

我真正想做的是:

*MyModule> myfunction arg1
                      arg1a

所以我的论证实际上是一个包含真实换行符的字符串。 在Haskell的输入之上。

但是,我没有找到任何这方面的例子,当我用一个真正的命令行尝试这个时,我总是会崩溃,因为解释器或编译器假定在换行时肯定会有一个新的参数。 是的,我试图用""包围字符串。没有区别。

有没有明显的方法可以解决这个问题,我还没找到?

启用multiline会出现以下错误:

   lexical error in string/character literal at character '\n'

根据要求:我实际使用的输入是:

  3
  this is a test
  foobar
  all your base

1 个答案:

答案 0 :(得分:5)

GHCi会议:

Prelude> :{
Prelude| 3 +
Prelude|   4 +
Prelude|   5
Prelude| :}
12

如果您尝试在字符串中插入实际换行符,我担心Haskell确实禁止这样做,支持以下样式:

Prelude> :{
Prelude| putStr "Hello\n\
Prelude|     \world!\n\
Prelude|     \ -- THE END\n"
Prelude| :}
Hello
world!
 -- THE END

在这里,我们需要将\n用于显式换行符。另请注意,\必须在行尾和下一行的开头使用 。后者\之前的空格将被忽略,以允许任何缩进。

还要考虑这种风格:

Prelude> :{
Prelude| putStrLn $ unlines
Prelude|   [ "Hello"
Prelude|   , "world!"
Prelude|   , " -- THE END"
Prelude|   ]
Prelude| :}
Hello
world!
 -- THE END

如果您只需要阅读输入,只需将其保存在文件中(例如test.txt)并将其作为字符串读取:

Prelude> test <- readFile "test.txt"
Prelude> putStr test
5
this is a test
foobar
all your base
class
pony along