Haskell模块
如果使用过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 '.' "Yiibai.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
。