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".