By George Z. August 10, 2021
模块(Modules)
如果您使用过 Java,那么您就会知道所有类是如何绑定到一个名为 package.json 的文件夹中的。 同样,Haskell 可以被视为模块的集合。Haskell 是一种函数式语言,一切都表示为表达式,因此模块可以称为相似或相关类型函数的集合。您可以将一个模块中的函数导入到另一个模块中。 在开始定义其他函数之前,所有“import”语句都应该放在第一位。 在本章中,我们将学习 Haskell 模块的不同特性。
List Module
List 提供了一些很棒的函数来处理列表类型的数据。 导入 List 模块后,您可以使用多种功能。在以下示例中,我们使用了 List 模块下的一些重要功能。
import Data.List
main = do
putStrLn("Different methods of List Module")
print(intersperse '.' "Tutorialspoint.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
"T.u.t.o.r.i.a.l.s.p.o.i.n.t...c.o.m"
"Lets Start with Haskell"
("Haskell","Tutorial")
[1,2,2,3,4,5,6,8]
Char Module
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 Module
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 Module
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 Module)
让我们看看如何创建一个可以在其他程序中调用的自定义模块。 为了实现这个自定义模块,我们将创建一个名为“custom.hs”的单独文件以及我们的“main.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
我们的自定义模块已准备就绪。 现在,让我们将其导入到程序中。 main.hs
import Custom
main = do
print(showEven 4)
print(showBoolean True)
输出即可关如下
True
1
showEven 函数返回 True,因为“4”是偶数。 showBoolean 函数返回“1”,因为我们传递给函数的布尔函数为“True”。