为什么我可以使用这个“私有”值构造函数?

时间:2014-05-01 14:39:34

标签: haskell

我把它放在Shapes.hs中:

module Shapes   
( Shape(Rectangle)
) where 

data Shape = Circle | Rectangle deriving (Show)

然后我进入GHCi并用:l Shapes加载它。

键入Circle有效。我只在paranthesis中指定了Rectangle,为什么它会起作用?

3 个答案:

答案 0 :(得分:5)

使用:load会产生副作用。如果您改为使用

ghci> :m +Shapes

ghci> import Shapes

您将无法访问Circle构造函数。

答案 1 :(得分:4)

:l module:l module.hs之后,您处于模块module的完整顶级范围内,这就是为什么Circle在您的情况下的范围。< / p>

请参阅:The effect of :load on what is in scope

答案 2 :(得分:3)

因为ghci中的“:l”读取文件并解释它。它与“导入”不同。