【发布时间】:2016-07-01 20:23:36
【问题描述】:
我刚刚遇到了一个似乎没有导出任何内容的 Haskell 模块。 Schwifty/Swift/M105/Types.hs:
module Schwifty.Swift.M105.Types where
项目中有其他模块导入它。
import Schwifty.Swift.M105.Types
我认为 Haskell 模块总是必须声明它们的导出。你不这样做是什么意思?
【问题讨论】:
标签: haskell
我刚刚遇到了一个似乎没有导出任何内容的 Haskell 模块。 Schwifty/Swift/M105/Types.hs:
module Schwifty.Swift.M105.Types where
项目中有其他模块导入它。
import Schwifty.Swift.M105.Types
我认为 Haskell 模块总是必须声明它们的导出。你不这样做是什么意思?
【问题讨论】:
标签: haskell
你要区分
module Foo () where) 和module Foo where)。空的导出列表意味着:不导出值或类型定义。但是,模块仍然会从模块本身以及所有导入的模块中导出所有实例声明,因此具有空导出列表的模块可能很有用。
根本没有导出列表:导出模块本身中的所有值和类型定义。 (当然还有所有的实例声明)。
【讨论】:
来自A Gentle Introduction to Haskell, Version 98:
如果模块关键字后面的导出列表被省略,则所有绑定在模块顶层的名称都会被导出。
【讨论】: