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

Jak*_*old 6 haskell yesod

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

Sho*_*hoe 9

在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)

是走是包含所有PreludeYesod模块和导出.

你建议的是:

module Import where
Run Code Online (Sandbox Code Playgroud)

不会导出由Prelude和导入的内容Yesod,如上所述:

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