Yesod中的`import Some.Module as Import`是什么意思?

时间:2014-06-09 23:39:15

标签: haskell yesod

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 ...关键字的含义是什么?

1 个答案:

答案 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
-- ...

将采用PreludeYesod模块中包含的所有内容并将其导出。

你建议改为:

module Import where

不会导出由PreludeYesod导入的内容,如上所述:

  

如果省略导出列表,则导出模块中定义的所有值,类型和类,,但不导出导入的