我把它放在~/Desktop/Shapes.hs
:
module Shapes
( Shape(Rectangle)
) where
data Shape = Circle | Rectangle deriving (Show)
然后我这样做:
cd ~/Desktop
ghci
ghci> :m +Shapes
<no location info>:
Could not find module `Shapes'
It is not a module in the current program, or in any known package.
ghci> import Shapes
<no location info>:
Could not find module `Shapes'
It is not a module in the current program, or in any known package.
为什么我会收到此错误?
我还尝试首先使用ghc -c Shapes.hs
进行编译。它仍然无效。
我在OS X 10.9.2 Mavericks上从haskell.org安装了“Haskell Platform 2013.2.0.0 for Mac OS X,64 bit”。我也按照ghc-clang-wrapper
的说明进行了操作。
更新
有人建议先做:l Shapes.hs
。问题是:l Shapes.hs
加载整个Shapes文件,这意味着即使我没有导出它,我也可以访问Circle
值构造函数。请参阅我之前的问题:Why can I use this "private" value constructor?我想加载仅模块。这可能吗?
答案 0 :(得分:6)
您需要先Shapes.hs
加载:l Shapes.hs
。
由于您的Shapes
尚未加载,因此:m Shapes
无效。
由于Shapes
可以找到的已编译包中不存在ghci
,因此import Shapes
无效。
如果您只希望导出符号在范围:load
模块之后,则可以使用:module
或import
仅导入这些符号。例如,在:load Shapes.hs
和:module Shapes
之后,Rectangle
将在范围内,但Circle
将不会。
请参阅:
What's really in scope at the prompt?
:module and :load