如何使用getContents从命令行获取输入?

Nic*_*unt 4 haskell

我的程序允许用户指定一个作为输入读取的文件,但这是可选的.如果用户没有指定文件,我想从命令行读取输入.

到目前为止我有这个:

main :: IO()
main = do
  (opts, mbArgs) <- parseCmdLine
  input <-
    case mbArgs of
      Nothing   -> getContents
      Just file -> readFile file
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.当用户没有规定文件时,他们能够输入输入,但似乎无法终止,以便程序可以对该输入进行操作.

我以为你必须按Ctrl + D,但这没有做任何事情.

谢谢你的帮助.

ehi*_*ird 9

在典型的类Unix终端中(例如Cygwin,至少在Cygwin中rxvt;不确定Windows命令提示符),Ctrl+ D只在你开始行时发送EOF.如果你点击Enter然后Ctrl+ D,它应该工作.如果你想在没有换行的情况下发送EOF,请连续两次点击Ctrl+ D.

如果不是这样,那么你的终端可能还有其他一些问题; 代码看起来很好.

  • IIRC,在Windows命令提示符下,它是"Ctrl + Z"后跟"Enter".我不记得它是否必须在一行的开头. (4认同)