显然,这种选择性导入仅部分起作用:
?> :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)
Run Code Online (Sandbox Code Playgroud)
但完全导入确实有效:
?> import Data.Monoid
?> :t Sum
Sum :: a -> Sum a
Run Code Online (Sandbox Code Playgroud)
为什么我可以从Monoid导入getSum而不是Sum?
我正在使用与Stack一起安装的GHCi 8.0.2.
您需要导入构造函数Sum:
?> import Data.Monoid (Sum(..), getSum)
Run Code Online (Sandbox Code Playgroud)
这将导入所有构造函数(在枚举/求和类型的情况下),如果您只想导入一个构造函数,您可以这样做:
?> import Data.Monoid (Sum(Sum), getSum)
Run Code Online (Sandbox Code Playgroud)