getArgs如何工作?

时间:2018-03-01 18:03:24

标签: haskell io arguments

我试图了解Haskell中的getArgs。这就是我所拥有的:

import System.Environment

myFunFunction = do
     args <- getArgs
     return $ head args

运行该功能时我得到的是

 *Main> myFunFunction
 *** Exception: Prelude.head: empty list

这与getLine的工作方式不同吗?为什么不要求命令行参数?

1 个答案:

答案 0 :(得分:4)

getArgs的类型为IO [String]。当您将其与<-绑定时,如在OP中一样,绑定符号(args)将获得类型[String],即字符串列表。

head函数返回列表中的第一个元素;它的类型为[a] -> a。它因为不安全而闻名,在某种意义上说,如果你把它应用到空列表中,它就会崩溃:

Prelude System.Environment> head []
*** Exception: Prelude.head: empty list

这就是这里发生的事情。 getArgs为您提供运行程序时在命令行中提供的参数。如果在命令行中没有提供任何参数,则返回的列表将为空。

getArgs功能不是交互式的。它只返回从命令行提供的参数,如果有的话。