gpt4 book ai didi

haskell - 如何在 GHCi 中导入 Haskell 模块?

转载 作者:行者123 更新时间:2023-12-03 14:13:56 26 4
gpt4 key购买 nike

我正在尝试从《Learn You A Haskell for Great Good》一书中自学 Haskell。我开始阅读第 7 章(模块)的最后一节,它讲述了如何创建自己的模块。我复制并粘贴了本节开头书中给出的几何模块。该文件的名称是 Geometry.hs,正如本书所建议的那样,该文件位于 ghci 的 bin 目录中,这是我之前能够使用 :l 成功加载另一个 .hs 文件的地方。

当我在 GHCi 中键入以下命令时

import Geometry

我收到以下错误:

Could not find module 'Geometry' It is not a module in the current program or in any known package



我一定是在做一些明显错误的事情,但我不知道它是什么。

最佳答案

当您使用 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!"
-- Main.hs
module Main where
import Foo (foo)

main :: IO ()
main = foo
$ cd/path/to/你的/文件
$ ghci
GHCi,版本 7.10.2:http://www.haskell.org/ghc/:?求助
前奏> 进口Foo

<无位置信息>:
找不到模块“Foo”
它不是 中的模块当前节目 ,或任何已知的包装。

前奏> :l Main.hs
[1 of 2] 编译 Foo(Foo.hs,解释)
[2 of 2] 编译 Main(Main.hs,解释)
好的,已加载模块:Main、Foo。
*Main> :l Main.hs
*主> foo
来自 foo 的你好!
*主要> 进口Foo
*Main Foo> -- 模块现在加载
如您所见,导入 Foo第一次失败。然而,在我们实际加载了使用 Foo 的程序之后,我们可以使用 import Foo在 GHCi 中。
所以如果你想使用 import在 GHCi 中,确保 GHC 可以通过将其包含在包装器中或安装它来找到您的模块。如果您只想加载模块本身,请使用 :l重载。

关于haskell - 如何在 GHCi 中导入 Haskell 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31732605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com