为什么在fmap方法参数后评估getArgs?

问题描述 投票:0回答:1

为什么在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特别值得评估之后呢?

haskell io functor
1个回答
4
投票

如果head在空列表中打破,这意味着getArgs已经评估过了,因为[]生成并匹配head

很可能你从ghci运行你的程序,它可以产生这样的效果。由于head不安全,您应该检查列表中是否存在至少一个参数。

© www.soinside.com 2019 - 2024. All rights reserved.