为什么在fmap方法参数后评估getArgs?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在fmap方法参数后评估getArgs?相关的知识,希望对你有一定的参考价值。
为什么在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
特别值得评估之后呢?
答案
如果head
在空列表中打破,这意味着getArgs
已经评估过了,因为[]
生成并匹配head
。
很可能你从ghci
运行你的程序,它可以产生这样的效果。由于head
不安全,您应该检查列表中是否存在至少一个参数。
以上是关于为什么在fmap方法参数后评估getArgs?的主要内容,如果未能解决你的问题,请参考以下文章
困惑(fmap length Just)[1,1,1,1] vs. fmap length $ Just [1,1,1,1]