当您在GHCi中使用import ModuleName
时,它的工作方式(大多数情况下)与import Data.List
相同: GHC会检查本地软件包数据库中的模块,加载它,并将其(导出的)内容引入范围。
但是,Geometry
不是使用ghc-pkg
安装的软件包的模块。因此,GHC根本不知道该模块存在。交互式变体GHCi也是如此。
但是,如果您:l
oad一个程序,情况就会改变。 GHC将考虑其使用的模块:
module Foo where
foo :: IO ()
foo = putStrLn "Hello from foo!"
module Main where
import Foo (foo)
main :: IO ()
main = foo
$ cd /path/to/your/files
$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelude> import Foo
<no location info>:
Could not find module ‘Foo’
It is not a module in the current program, or in any known package.
Prelude> :l Main.hs
[1 of 2] Compiling Foo ( Foo.hs, interpreted )
[2 of 2] Compiling Main ( Main.hs, interpreted )
Ok, modules loaded: Main, Foo.
*Main> :l Main.hs
*Main> foo
Hello from foo!
*Main> import Foo
*Main Foo> -- module now loaded
可以看到,首先导入 Foo
失败了。但是,当我们实际加载使用 Foo
的程序后,在 GHCi 中就能够成功使用 import Foo
。
所以如果你想在 GHCi 中使用 import
,请确保 GHC 能够找到你的模块,要么将其包含在一个包装器中,要么安装它。如果只想加载模块本身,请使用 :l
oad 命令。
:!cd
来查看ghci的当前工作目录)。 - luqui:l
命令加载的文件使用,否则GHCi不会将其识别为模块。创建一个额外的文件,在其中导入Geometry
模块,然后加载该文件即可。 - ZetaGeometry
本身而不创建包装模块)。 - Daniel Wagner