haskell模块的用法

来源:百度文库 编辑:神马文学网 时间:2024/05/25 15:24:29
1.模块的导出
module ModName(模块名) where
data  T1 .....
data  T2 .....
func1 ....
func2 ....
模块名要与包含模块的文件名(出去扩展名.hs)相同。
可以控制模块被导入后,别人能够使用的内容。格式如下
如果你不想fuc2被使用,则可以这样写:
module ModName (
T1,
T2,
func1)
where
data Card = Card Suit Face
data Suit = Hearts
| Spades
| Diamonds
| Clubs
data Face = Jack
| Queen
| King
| Ace
| Number Int
如果在你的模块中有如上的自定义数据类型。如果你不希望别人使用其中的构造器(constructors),你可以这样写:
module ModName ( Card(),
Suit(),
Face())
where
如果你希望别人使用其中的构造器(constructors),可以这样写:
module ModName ( Card(..),
Suit(..),
Face(..))
where
".."代表了所有的构造器(constructors)。
2.模块的导入
使用方式:
import ModName
当导入模块后,你就可以直接使用模块里面的函数与数据类型了。比如在上一个Mod里面定义的func1,你可以直接用func1 .... 或者 ModName.func1 ....。使用后面的方式可以避免一些不必要的混淆,比如你在现在的模块里又定义了一个func1。
import qualified ModName
强制使用ModName.func1 ....,否则报错。
调用模块中特定的函数或类型
import ModName (func1)
那么在目前的文件中你只能使用ModName的func1,其他的你不能使用。
不调用模块中特定的函数或类型
import ModName hiding (func1)
那么在目前的文件中你不能使用ModName的func1,其他的你都可以使用。
重命名模块:
如果模块的名字太长了,这样做很有用。
import (qualified) ModName as AnotherName
以上介绍的导入方式可以混合使用。
*********************************************************************************************
Hierarchical Imports
分级导入
并非haskell标准规定的。它的意义是一个在haskell调用目录下可以搜索模块的功能。
eg:
E:\Haskell是haskell的编译路径。你的模块Mos1,在E:\Haskell\Mos下。那么你可这样导入模块Mos1,而不用担心编译报告找不到模块。
import Mos.Mos1
第一个Mos是文件夹的名字。