Yesod中的scaffolded站点生成一个Import.hs
文件,其中包含以下内容。
module Import
( module Import
) where
import Prelude as Import
import Yesod as Import
-- ...
这种模式是什么?我的理解是它从Import.hs
包中导入的模块中导出所有内容,但不仅仅module Import where
执行相同的操作? module
中的嵌套module Import (module Import) where ...
关键字的含义是什么?
答案 0 :(得分:9)
在Haskell语言报告中,导出模块的描述如下:
表单“模块M”使用非限定名称“e”和限定名称“M.e”来命名范围内所有实体的集合。这个集合可能是空的。
§5.2导出列表
导出列表标识模块声明要导出的实体。模块实现可能只导出它声明的实体,或者从某个其他模块导入的实体。如果省略导出列表,则导出模块中定义的所有值,类型和类,但不导出导入的值。
导出列表中的实体可以按如下方式命名:
...
“模块M”形式使用非限定名称“e”和限定名称“M.e”来命名范围内所有实体的集合。此设置可能为空。
这意味着语义:
module Import
( module Import
) where
import Prelude as Import
import Yesod as Import
-- ...
将采用Prelude
和Yesod
模块中包含的所有内容并将其导出。
你建议改为:
module Import where
不会导出由Prelude
和Yesod
导入的内容,如上所述:
如果省略导出列表,则导出模块中定义的所有值,类型和类,,但不导出导入的。