Guest User

Untitled

a guest
Oct 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. ####模块的导出
  2. ```haskell
  3. module ModName(模块名) where
  4. data T1 .....
  5. data T2 .....
  6. func1 ....
  7. func2 ....`
  8. ```
  9. 模块名要与包含模块的文件名(出去扩展名.hs)相同。
  10. 可以控制模块被导入后,别人能够使用的内容。格式如下
  11. 如果你不想fuc2被使用,则可以这样写:
  12.  
  13. ```haskell
  14. module ModName (
  15. T1,
  16. T2,
  17. func1)
  18. where
  19. data Card = Card Suit Face
  20. data Suit = Hearts
  21. | Spades
  22. | Diamonds
  23. | Clubs
  24. data Face = Jack
  25. | Queen
  26. | King
  27. | Ace
  28. | Number Int
  29. ```
  30.  
  31. 如果在你的模块中有如上的自定义数据类型。如果你不希望别人使用其中的构造器(constructors),你可以这样写:
  32.  
  33. ```haskell
  34. module ModName ( Card(),
  35. Suit(),
  36. Face())
  37. where
  38. ```
  39.  
  40.  
  41. 如果你希望别人使用其中的构造器(constructors),可以这样写:
  42.  
  43. ```haskell
  44. module ModName ( Card(..),
  45. Suit(..),
  46. Face(..))
  47. where
  48. ```
  49. ".."代表了所有的构造器(constructors)。
  50.  
  51. ####模块的导入
  52. 使用方式:
  53. import ModName
  54. 当导入模块后,你就可以直接使用模块里面的函数与数据类型了。比如在上一个Mod里面定义的func1,你可以直接用func1 .... 或者 ModName.func1 ....。使用后面的方式可以避免一些不必要的混淆,比如你在现在的模块里又定义了一个func1。
  55. import qualified ModName
  56. 强制使用ModName.func1 ....,否则报错。
  57. 调用模块中特定的函数或类型
  58. import ModName (func1)
  59. 那么在目前的文件中你只能使用ModName的func1,其他的你不能使用。
  60.  
  61. 不调用模块中特定的函数或类型
  62. import ModName hiding (func1)
  63. 那么在目前的文件中你不能使用ModName的func1,其他的你都可以使用。
  64. 重命名模块:
  65. 如果模块的名字太长了,这样做很有用。
  66. import (qualified) ModName as AnotherName
  67. 以上介绍的导入方式可以混合使用。
  68.  
  69.  
  70. ####Hierarchical Imports
  71. 分级导入
  72. 并非haskell标准规定的。它的意义是一个在haskell调用目录下可以搜索模块的功能。
  73. eg:
  74. E:\Haskell是haskell的编译路径。你的模块Mos1,在E:\Haskell\Mos下。那么你可这样导入模块Mos1,而不用担心编译报告找不到模块。
  75. import Mos.Mos1
  76. 第一个Mos是文件夹的名字。
Add Comment
Please, Sign In to add comment