如果模块位于同一目录中,是否无法从其他模块导入模块? (哈斯克尔)

时间:2018-09-06 11:15:26

标签: haskell ghc ghci haskell-platform winghci

为了演示我的问题,我创建了一个像这样的测试项目->

enter image description here

目录“ Data”只有两个模块,即“ Test3.hs”和“ Test4.hs”。它们是用于测试目的的空模块。 (实现:“模块Data.Test3其中”)

“ Test1.hs”导入所有这样的模块->

enter image description here

这会导致错误->

enter image description here

我正在使用WinGHCi导入模块,这会自动将目录更改为“ cd:〜\ .hs”。

我还尝试通过使用GHCi和手动更改目录来导入模块。但最终得到与上述相同的结果。

因此,我得出的结论是,无法从同一目录导入自己的模块,并且必须始终仅为此目的创建子目录。

对吗?

1 个答案:

答案 0 :(得分:3)

您需要确定根目录在哪里,从该目录运行GHCi,然后始终相对于同一目录命名所有模块。

您需要在模块声明(module Foo where...在导入语句(import Foo)中一致地命名模块。

所以您既需要

module Test.Test1 where

import Test.Data.Test3
import Test.Data.Test4
import Test.Test2

Test内部运行GHCi,并删除所有Test前缀。但是您不能在某些名称上加上前缀,而在其他名称上则不能。您必须在所有地方保持一致。每个模块名称基本上都是从当前目录到源文件所在位置的文件路径。