如果使用过Java,那么应该知道如何将所有类绑定到一个名为package
的文件夹中。同样,Haskell可将这种类似package
概念视为模块。
Haskell是一种函数化编程语言,所有内容都表示为一种表达式,因此,模块是相似或相关类型的函数的集合。
可以将函数从一个模块导入另一个模块。在开始定义函数之前,所有import
语句都应放在第一位。在本章中,我们将学习在Haskell模块中定义和使用的不同函数。
列表提供了一些很棒的功能来处理列表类型数据。导入Data.List
模块后,便可以使用多种函数功能。在下面的示例中,使用了List
模块下的一些重要功能。
import Data.List main = do putStrLn("Different methods of List Module") print(intersperse '.' "zyiz.net") print(intercalate " " ["Lets","Start","with","Haskell"]) print(splitAt 7 "HaskellTutorial") print (sort [8,5,3,2,1,6,4,2])
在这里,有许多函数不需要定义它们。这是因为这些函数在List
模块中已经定义并且可用。导入List
模块后,Haskell编译器使所有这些函数在全局名称空间中可用。
执行上面示例代码将产生以下输出结果:
Different methods of List Module "Y.i.i.b.a.i...c.o.m" "Lets Start with Haskell" ("Haskell","Tutorial") [1,2,2,3,4,5,6,8]
Char
模块具有很多预定义的函数功能,可以与Character
类型一起使用。看一下下面的代码块:
import Data.Char main = do putStrLn("Different methods of Char Module") print(toUpper 'a') print(words "Let us study tonight") print(toLower 'A')
在这里,toUpper
和toLower
函数已在Char
模块内部定义。执行上面代码将产生以下输出:
Different methods of Char Module 'A' ["Let","us","study","tonight"] 'a'
Map是未排序的键-值对的类型数据。它是具有许多有用功能的广泛使用的模块。以下示例显示了如何使用Map模块中可用的预定义函数功能。
import Data.Map (Map) import qualified Data.Map as Map --required for GHCI myMap :: Integer -> Map Integer [Integer] myMap n = Map.fromList (map makePair [1..n]) where makePair x = (x, [x]) main = print(myMap 3)
执行上面示例代码,得到以下结果:
fromList [(1,[1]),(2,[2]),(3,[3])]
Set
模块中有一些非常有用的预定义函数来处理数学数据。集合实现为二叉树,因此集合中的所有元素必须唯一。
看下面的示例代码:
import qualified Data.Set as Set text1 = "Hey buddy" text2 = "This tutorial is for Haskell" main = do let set1 = Set.fromList text1 set2 = Set.fromList text2 print(set1) print(set2)
在这里,我们将String
修改为Set
。它将产生以下输出(输出集没有重复字符)
执行上面示例代码,得到以下结果:
fromList " Hbdeuy" fromList " HTaefhiklorstu"
下面来看看如何创建一个可以在其他程序中调用的自定义模块。为了实现此自定义模块,将创建一个单独的文件custom.hs
以及main.hs
。创建自定义模块:custom.hs,并在其中定义一些函数。
文件:custom.hs
module Custom ( showEven, showBoolean ) where showEven:: Int-> Bool showEven x = do if x 'rem' 2 == 0 then True else False showBoolean :: Bool->Int showBoolean c = do if c == True then 1 else 0
上面的自定义模块已经编写完成。接下来将它导入到程序中,如下代码所示:
import Custom main = do print(showEven 4) print(showBoolean True)
执行上面示例代码,得到以下结果:
True 1
showEven
函数返回True
,因为4
是一个偶数。所以showBoolean
函数返回1
,因为传递给该函数的参数值为True
。