我有两个.hs文件:一个包含一个新的类型声明,另一个使用它。
first.hs:
module first () where
type S = SetType
data SetType = S[Integer]
second.hs:
module second () where
import first
当我运行second.hs时,第一个,第二个模块都加载得很好。
但是,当我在Haskell平台上编写:type
S时,会出现以下错误
不在范围内:数据构造函数'S'
注意:每个模块中都有一些功能可以肯定,我只是为了简洁而跳过它
答案 0 :(得分:23)
module first () where
假设实际上模块名称以大写字母开头,必要时,空导出列表 - ()
- 表示模块不会导出任何内容,因此First
中定义的内容不在Second
范围内。
完全省略导出列表以导出所有顶级绑定,或在导出列表中列出导出的实体
module First (S, SetType(..)) where
((..)
导出SetType
的构造函数,没有它,只导出类型。
并用作
module Second where
import First
foo :: SetType
foo = S [1 .. 10]
或者,为了限制导入到特定类型和构造函数:
module Second where
import First (S, SetType(..))
你也可以缩进顶级,
module Second where
import First
foo :: SetType
foo = S [1 .. 10]
但这很难看,而且由于错误地计算了缩进,可能会出错。
答案 1 :(得分:3)
First.hs
:
module First where
type S = SetType
data SetType = S[Integer]
Second.hs
:
module Second where
import First