Yesod中的scaffolded站点生成一个Import.hs包含以下内容的文件.
module Import
( module Import
) where
import Prelude as Import
import Yesod as Import
-- ...
Run Code Online (Sandbox Code Playgroud)
这种模式是什么?我的理解是它从Import.hs包中导入的模块中导出所有内容,但不会只是module Import where做同样的事情吗?嵌套module关键字里面的含义是什么module Import (module Import) where ...?
在Haskell语言报告中,导出模块的描述如下:
"模块M"形式使用非限定名称"e"和限定名称"Me"来命名范围内的所有实体的集合.此设置可能为空.
§5.2 出口清单
导出列表标识模块声明要导出的实体.模块实现可能只导出它声明的实体,或者从某个其他模块导入的实体.如果省略导出列表,则导出模块中定义的所有值,类型和类,但不导出导入的值.
导出列表中的实体可以命名如下:
...
"模块M"形式使用非限定名称"e"和限定名称"Me"来命名范围内的所有实体的集合.此设置可能为空.
它意味着语义:
module Import
( module Import
) where
import Prelude as Import
import Yesod as Import
-- ...
Run Code Online (Sandbox Code Playgroud)
是走是包含所有Prelude与Yesod模块和导出.
你建议的是:
module Import where
Run Code Online (Sandbox Code Playgroud)
不会导出由Prelude和导入的内容Yesod,如上所述:
如果省略导出列表,则导出模块中定义的所有值,类型和类,但不导出导入的值.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |