use*_*980 17 import haskell ghci
我正在尝试从"为了好大而学习你的哈斯克尔"一书中自学Haskell.我到了第7章(模块)的最后一部分,它讲述了如何创建自己的模块.我在本节开头的书中给出了几何模块的复制和粘贴.该文件的名称是Geometry.hs,正如本书所建议的那样,该文件位于ghci的bin目录中,这是我之前能够使用以下方法成功加载的地方:l用于另一个.hs文件.
当我在GHCi中键入以下命令时
import Geometry
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
找不到模块'Geometry'它不是当前程序或任何已知包中的模块
我必须做一些明显错误的事情,但我无法弄明白它是什么.
Zet*_*eta 14
当您import ModuleName在GHCi中使用时,它(大多数)以相同的方式import Data.List工作:GHC检查您的本地包数据库中的模块,加载它,并将其(导出的)内容带入范围.
但是,Geometry不是安装包的模块ghc-pkg.因此,GHC根本不知道模块是否Geometry存在.它也不是交互变体GHCi.
但如果你:l有一个程序,事情会发生变化.GHC将考虑使用的模块:
-- Foo.hs
module Foo where
foo :: IO ()
foo = putStrLn "Hello from foo!"
Run Code Online (Sandbox Code Playgroud)
-- Main.hs
module Main where
import Foo (foo)
main :: IO ()
main = foo
Run Code Online (Sandbox Code Playgroud)
$ 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,我们能够import Foo在GHCi中使用.
因此,如果您想import在GHCi中使用,请确保GHC可以通过将其包含在包装器中或安装它来找到您的模块.如果您只想加载模块本身,请使用:load.