Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在GHCi中导入Haskell模块?_Haskell_Import_Ghci - Fatal编程技术网

如何在GHCi中导入Haskell模块?

如何在GHCi中导入Haskell模块?,haskell,import,ghci,Haskell,Import,Ghci,我试着从书中自学哈斯凯尔,为你学习哈斯凯尔。我读到了第7章(模块)的最后一节,在那里它告诉我们如何创建自己的模块。我复制并粘贴了本节开头书中给出的几何模块。正如书中所建议的,文件名为Geometry.hs,该文件位于ghci的bin目录中,我以前曾在该目录中使用:l成功加载另一个.hs文件 当我在GHCi中键入以下命令时 import Geometry 我得到以下错误: 找不到模块“几何体”,它不是当前数据库中的模块 程序或任何已知的包中 我一定是做了一些明显错误的事情,但我不知道它是什么。当

我试着从书中自学哈斯凯尔,为你学习哈斯凯尔。我读到了第7章(模块)的最后一节,在那里它告诉我们如何创建自己的模块。我复制并粘贴了本节开头书中给出的几何模块。正如书中所建议的,文件名为Geometry.hs,该文件位于ghci的bin目录中,我以前曾在该目录中使用:l成功加载另一个.hs文件

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

import Geometry
我得到以下错误:

找不到模块“几何体”,它不是当前数据库中的模块 程序或任何已知的包中


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

当您在GHCi中使用
import ModuleName
时,它的工作方式(大部分)与导入数据的工作方式相同。List工作方式:GHC检查本地包数据库中的模块,加载它,并将其(导出的)内容纳入范围

但是,
Geometry
不是随
ghc-pkg
安装的软件包的模块。因此,GHC根本不知道存在模块
几何体
。它也不支持GHCi

但是如果你加载一个程序,事情就会改变。GHC将考虑其使用的模块:

-- Foo.hs
module Foo where

foo :: IO ()
foo = putStrLn "Hello from foo!"
--Main.hs
模块主要在哪里
导入Foo(Foo)
main::IO()
main=foo
$cd/path/to/your/files $ghci GHCi,7.10.2版:http://www.haskell.org/ghc/ :? 求救 序曲>导入Foo : 找不到模块“Foo” 它不是当前程序或任何已知程序包中的模块。 前奏曲>:l Main.hs [1/2]编译Foo(Foo.hs,解释) [2/2]编译Main(Main.hs,已解释) 好的,加载的模块:Main,Foo。 *Main>:l Main.hs *Main>foo 你好,来自福! *Main>导入Foo *主Foo>--模块现在已加载 如您所见,首次导入
Foo
失败。然而,在我们实际加载了使用
Foo
的程序之后,我们能够在GHCi中使用
import Foo


因此,如果您想在GHCi中使用
import
,请确保GHC可以找到您的模块,方法是将其包含在包装器中或安装它。如果您只想加载模块本身,请使用
:l
oad。

TLDR:the Learn you a Haskell book没有提到您必须先加载
:Geometry.hs
文件。然后
:m
返回到
前奏曲
,然后
导入几何体
工作。

你的意思是不是?我只能从ghci的当前工作目录加载已安装的模块和模块(如果你在windows上,你可能可以运行
:!cd
来查找ghci的当前工作目录)是的,我把问题改到了第七章。我一直在使用pdf格式的旧版本的书,它是该版本的第6章。我跑了!cd命令,它指向我一直使用的同一目录。据我所知,GHCi不会将本地文件识别为模块,除非它们被加载的文件使用。创建一个附加文件,在其中导入几何体并加载该文件。@Zeta这听起来像是我的答案(尽管我想你可以只加载几何体本身而不创建包装器模块)。谢谢大家。我发现了问题。pdf文件中有一行代码,该代码延续到下一行文本。:load命令在错误消息方面比导入命令更有用。谢谢您的回答,。有没有一种方法可以让ghc全局意识到一个定制模块(这样你就不需要导航到它所在的目录)?@Chris我错过了这个评论。你同时找到答案了吗?@Zeta不是真的,但我被建议无论如何不要这样做,而是用沙箱。谢谢。这一次我损失了一两个小时。模块也必须以大写字母开头。:module命令也是如此。