模块
module
就是Java里面的包,Python里面的模块,C++里面的命名空间
一个 Haskell 源文件只能有一个模块声明
模块声明(如果存在)必须位于文件的顶部
导入声明必须紧跟模块声明之后(如果有的话),并位于其他代码之前
模块声明
用于指定该模块的名称
并声明哪些符号(函数、数据类型等)应该被导出其中,ModuleName 是模块的名称,通常与文件名相匹配
如果没有明确的模块声明,文件的模块名称将是 Main,并且它应该包含一个名为 main 的 IO 动作
-- 基本模块声明,导出所有符号
module MyModule where
-- 明确导出列表,指定要导出的符号
module ModuleName (symbol1, symbol2, ...) where
-- 导出数据类型
module ModuleName (DataType(..)) where -- 导出 DataType 和其所有构造器
module ModuleName (DataType(Constructor1, Constructor2)) where -- 只导出特定构造器
-- 导出类型类
module ModuleName (TypeClass(..)) where -- 导出 TypeClass 的所有方法
module ModuleName (TypeClass(method1, method2)) where -- 只导出特定方法
-- 声明为子模块
module ModuleName.SubModuleName where
导入声明
-- 基本导入:导入所有 符号
import ModuleName
-- 限制导入:只导入指定符号
import ModuleName (symbol1, symbol2)
-- 排除导入:导入除指定符号外的所有符号
import ModuleName hiding (symbol1, symbol2)
-- 别名:导入并为模块指定别名
import qualified ModuleName as Alias
-- 导入数据类型:导入数据类型和构造器
import ModuleName (DataType(..)) -- 导入 DataType 和其所有构造器
import ModuleName (DataType(Constructor1, Constructor2)) -- 只导入特定构造器
-- 导入类型类:导入类型类和方法
import ModuleName (TypeClass(..)) -- 导入 TypeClass 的所有方法
import ModuleName (TypeClass(method1, method2)) -- 只导入特定方法