为什么我不能导入这个Haskell模块?

时间:2014-05-02 12:41:55

标签: haskell

我把它放在~/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?我想加载仅模块。这可能吗?

1 个答案:

答案 0 :(得分:6)

您需要先Shapes.hs加载:l Shapes.hs

  1. 由于您的Shapes尚未加载,因此:m Shapes无效。

  2. 由于Shapes可以找到的已编译包中不存在ghci,因此import Shapes无效。

  3. 如果您只希望导出符号在范围:load模块之后,则可以使用:moduleimport仅导入这些符号。例如,在:load Shapes.hs:module Shapes之后,Rectangle将在范围内,但Circle将不会。

    请参阅:
    What's really in scope at the prompt?
    :module and :load