[英]How can I import a Haskell module in GHCi?
我正在尝试从《Learn You A Haskell for Great Good》这本书中自学 Haskell。 我读到了第 7 章(模块)的最后一节,它讲述了如何创建自己的模块。 我复制并粘贴了该部分开头书中给出的几何模块。 该文件的名称是 Geometry.hs,正如书中所建议的,该文件位于 ghci 的 bin 目录中,这是我以前能够使用 :l 成功加载另一个 .hs 文件的地方。
当我在 GHCi 中输入以下命令时
import Geometry
我收到以下错误:
找不到模块“几何”它不是当前程序或任何已知包中的模块
我一定在做一些明显错误的事情,但我无法弄清楚它是什么。
当您在 GHCi 中使用import ModuleName
时,它的工作方式(大部分)与import Data.List
工作方式相同:GHC 检查您本地包数据库中的模块,加载它,并将其(导出的)内容引入范围。
但是, Geometry
不是随ghc-pkg
安装的软件包的模块。 因此,GHC 根本不知道Geometry
模块的存在。 它也不是交互式变体 GHCi。
但是如果你:l
加载一个程序,事情就会改变。 GHC 将考虑其使用的模块:
-- Foo.hs
module Foo where
foo :: IO ()
foo = putStrLn "Hello from foo!"
-- Main.hs
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。
TLDR:Learn you a Haskell 一书中没有提到你必须先:load
Geometry.hs
文件。 然后:m
返回Prelude
,然后import Geometry
作品。
现在也可以在安装包时添加 lib 标志,即运行cabal install --lib packagename
然后直接在 GHCi 中导入相应的包。 在目前的情况下,例如cabal install --lib hgeometry
将有助于从此几何包导入模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.