如果使用過Java,那麼應該知道如何將所有類綁定到一個名為package
的檔夾中。同樣,Haskell可將這種類似package
概念視為模組。
Haskell是一種函數化編程語言,所有內容都表示為一種運算式,因此,模組是相似或相關類型的函數的集合。
可以將函數從一個模組導入另一個模組。在開始定義函數之前,所有import
語句都應放在第一位。在本章中,我們將學習在Haskell模組中定義和使用的不同函數。
1. List模組
列表提供了一些很棒的功能來處理列表類型數據。導入Data.List
模組後,便可以使用多種函數功能。在下面的示例中,使用了List
模組下的一些重要功能。
import Data.List
main = do
putStrLn("Different methods of List Module")
print(intersperse '.' "xuhuhu.com")
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]
2. Char模組
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'
3. Map模組
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])]
4. Set模組
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"
5.自定義模組
下麵來看看如何創建一個可以在其他程式中調用的自定義模組。為了實現此自定義模組,將創建一個單獨的檔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
。