Haskell选择性导入仅部分工作

时间:2017-05-14 16:17:24

标签: haskell import

显然,这种选择性导入仅部分起作用:

λ> :m
λ> import Data.Monoid (Sum, getSum)
λ> :t getSum
getSum :: Sum a -> a
λ> :t Sum

<interactive>:1:1: error:
    • Data constructor not in scope: Sum
    • Perhaps you meant variable ‘sum’ (imported from Prelude)

但完全导入确实有效:

λ> import Data.Monoid
λ> :t Sum
Sum :: a -> Sum a

为什么我可以从Monoid导入getSum而不是Sum?

我正在使用与Stack一起安装的GHCi 8.0.2。

1 个答案:

答案 0 :(得分:5)

您需要导入Sum的构造函数:

λ> import Data.Monoid (Sum(..), getSum)

这将导入所有构造函数(如果是 enum / sum类型),如果你只想导入一个构造函数,你可以这样做:

λ> import Data.Monoid (Sum(Sum), getSum)