不在范围数据构造函数中

Shi*_*maa 19 haskell

我有两个.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)

但这很难看,而且由于错误地计算了缩进,可能会出错.