当Haskell模块没有声明任何导出时它意味着什么?

时间:2016-07-01 20:23:36

标签: haskell

我刚遇到一个似乎不会导出任何东西的Haskell模块。 Schwifty/Swift/M105/Types.hs

module Schwifty.Swift.M105.Types where

项目中还有其他模块可以导入它。

import Schwifty.Swift.M105.Types

我认为Haskell模块总是必须声明它们的输出。什么意思,当你不这样做?

2 个答案:

答案 0 :(得分:6)

你必须要区分

  1. 空导出列表(module Foo () where)和
  2. 根本没有导出列表(module Foo where)。
  3. 空导出列表表示:不导出任何值或类型定义。但是,模块仍然从模块本身和所有导入的模块导出所有实例声明,因此具有空导出列表的模块可能很有用。

    根本没有导出列表:导出模块本身中的所有值和类型定义。 (当然,还有所有实例声明)。

答案 1 :(得分:5)

来自A Gentle Introduction to Haskell, Version 98

  

如果省略module关键字后面的导出列表,则会导出模块顶层绑定的所有名称。