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