Haskell - Módulos
Se você trabalhou em Java, então você sabe como todas as classes são vinculadas a uma pasta chamada package. Da mesma forma, Haskell pode ser considerado uma coleção demodules.
Haskell é uma linguagem funcional e tudo é denotado como uma expressão, portanto, um Módulo pode ser chamado como uma coleção de tipos de funções semelhantes ou relacionados.
Você pode importuma função de um módulo em outro módulo. Todas as instruções "import" devem vir primeiro, antes de você começar a definir outras funções. Neste capítulo, aprenderemos os diferentes recursos dos módulos Haskell.
Módulo de Lista
List fornece algumas funções maravilhosas para trabalhar listdigite dados. Depois de importar o módulo Lista, você terá uma ampla gama de funções à sua disposição.
No exemplo a seguir, usamos algumas funções importantes disponíveis no módulo Lista.
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])
Aqui, temos muitas funções, mesmo sem defini-las. Isso ocorre porque essas funções estão disponíveis no módulo Lista. Após importar o módulo List, o compilador Haskell disponibilizou todas essas funções no namespace global. Portanto, poderíamos usar essas funções.
Nosso código produzirá a seguinte saída -
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]
Módulo Char
o CharO módulo tem muitas funções predefinidas para trabalhar com o tipo de caractere. Dê uma olhada no seguinte bloco de código -
import Data.Char
main = do
putStrLn("Different methods of Char Module")
print(toUpper 'a')
print(words "Let us study tonight")
print(toLower 'A')
Aqui, as funções toUpper e toLower já estão definidos dentro do Charmódulo. Ele produzirá a seguinte saída -
Different methods of Char Module
'A'
["Let","us","study","tonight"]
'a'
Módulo de Mapa
Mapé um tipo de dados de par de valor agregado não classificado. É um módulo amplamente utilizado com muitas funções úteis. O exemplo a seguir mostra como você pode usar uma função predefinida disponível no módulo Mapa.
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)
Ele produzirá a seguinte saída -
fromList [(1,[1]),(2,[2]),(3,[3])]
Definir Módulo
O módulo Set tem algumas funções predefinidas muito úteis para manipular dados matemáticos. Um conjunto é implementado como uma árvore binária, portanto, todos os elementos em um conjunto devem ser únicos.
Dê uma olhada no seguinte código de exemplo
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)
Aqui, estamos modificando uma String em um Conjunto. Ele produzirá a seguinte saída. Observe que o conjunto de saída não possui repetição de caracteres.
fromList " Hbdeuy"
fromList " HTaefhiklorstu"
Módulo Personalizado
Vamos ver como podemos criar um módulo personalizado que pode ser chamado em outros programas. Para implementar este módulo personalizado, criaremos um arquivo separado chamado"custom.hs" junto com nosso "main.hs".
Vamos criar o módulo personalizado e definir algumas funções nele.
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
Nosso módulo personalizado está pronto. Agora, vamos importá-lo para um programa.
main.hs
import Custom
main = do
print(showEven 4)
print(showBoolean True)
Nosso código irá gerar a seguinte saída -
True
1
o showEven função retorna True, pois "4" é um número par. oshowBoolean function retorna "1", pois a função booleana que passamos para a função é "True".