繁体   English   中英

如何在 GHCi 中导入 Haskell 模块?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM