Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ####模块的导出
- ```haskell
- module ModName(模块名) where
- data T1 .....
- data T2 .....
- func1 ....
- func2 ....`
- ```
- 模块名要与包含模块的文件名(出去扩展名.hs)相同。
- 可以控制模块被导入后,别人能够使用的内容。格式如下
- 如果你不想fuc2被使用,则可以这样写:
- ```haskell
- 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),你可以这样写:
- ```haskell
- module ModName ( Card(),
- Suit(),
- Face())
- where
- ```
- 如果你希望别人使用其中的构造器(constructors),可以这样写:
- ```haskell
- module ModName ( Card(..),
- Suit(..),
- Face(..))
- where
- ```
- ".."代表了所有的构造器(constructors)。
- ####模块的导入
- 使用方式:
- 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是文件夹的名字。
Add Comment
Please, Sign In to add comment