Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么我可以用这个;“私人”;值构造函数?_Haskell - Fatal编程技术网

Haskell 为什么我可以用这个;“私人”;值构造函数?

Haskell 为什么我可以用这个;“私人”;值构造函数?,haskell,Haskell,我把它放在形状中。hs: module Shapes ( Shape(Rectangle) ) where data Shape = Circle | Rectangle deriving (Show) 然后,我进入GHCi,并用:l形状加载它 键入Circle有效。我在论文中只指定了Rectangle,为什么它能工作?这是使用:load的副作用。如果你用 ghci> :m +Shapes 或 您将无法访问循环构造函数。因为ghci中的“:l”读取文件并对其进行解释。它与“导

我把它放在形状中。hs:

module Shapes   
( Shape(Rectangle)
) where 

data Shape = Circle | Rectangle deriving (Show)
然后,我进入GHCi,并用
:l形状加载它


键入
Circle
有效。我在论文中只指定了
Rectangle
,为什么它能工作?

这是使用
:load
的副作用。如果你用

ghci> :m +Shapes


您将无法访问
循环
构造函数。

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

在您的
:l模块
:l模块.hs
之后,您处于模块
模块的完整顶级范围内,这就是为什么在您的情况下,
圆圈
在范围内


请参阅:

这是因为您没有导入模块
形状
。您正在直接加载文件
Shapes.hs
。这不起作用。如果我做了
:m+形状
导入形状
我得到
:找不到模块“形状”,它不是当前程序或任何已知包中的模块。
我确实从Shapes.hs所在的同一目录运行了GHCi。您是否使用
ghc-c形状编译它。hs
?是的,我刚刚尝试过,但没有帮助。在
导入形状
:m+形状
期间,我仍然会遇到相同的错误。(顺便说一下,本节没有提到我必须首先使用
ghc-c
进行编译:)还有其他想法吗?
ghci> import Shapes