为什么getArgs
在方法参数fmap
之后得到求值?
main::IO()
main=do
fpath<-fmap head getArgs
putStrLn fpath
我得到了错误:
Exception: Prelude.head: empty list
看来它适用于尚未计算的事物。
我首先认为这可能是关于懒惰的另一条规则,因为我不知道对Haskell陌生,所以我尝试使用:
a<-fmap head getLine
#没问题
a<-fmap head (readFile [filename])
#再次没问题
那么为什么getArgs
会在之后得到特殊评价?
答案 0 :(得分:4)
如果head
在空白列表上中断,则意味着getArgs
已完成的求值,因为值[]
由{{1}生成并匹配}。
很可能您是从head
运行程序的,可以产生这种效果。由于ghci
是不安全的,因此您应该检查列表中是否至少有一个参数。