Haskell - Módulos

Si ha trabajado en Java, entonces sabría cómo todas las clases están enlazadas en una carpeta llamada package. De manera similar, Haskell puede considerarse como una colección demodules.

Haskell es un lenguaje funcional y todo se denota como una expresión, por lo tanto, un módulo se puede llamar como una colección de tipos de funciones similares o relacionadas.

Usted puede importuna función de un módulo a otro módulo. Todas las declaraciones de "importación" deben ir primero antes de comenzar a definir otras funciones. En este capítulo, aprenderemos las diferentes características de los módulos de Haskell.

Módulo de lista

List proporciona algunas funciones maravillosas para trabajar listescriba los datos. Una vez que importe el módulo Lista, tendrá una amplia gama de funciones a su disposición.

En el siguiente ejemplo, hemos utilizado algunas funciones importantes disponibles en el 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])

Aquí tenemos muchas funciones sin siquiera definirlas. Esto se debe a que estas funciones están disponibles en el módulo Lista. Después de importar el módulo List, el compilador Haskell hizo que todas estas funciones estuvieran disponibles en el espacio de nombres global. Por tanto, podríamos utilizar estas funciones.

Nuestro código producirá el siguiente resultado:

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 de caracteres

los CharEl módulo tiene muchas funciones predefinidas para trabajar con el tipo de carácter. Eche un vistazo al siguiente bloque 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')

Aquí, las funciones toUpper y toLower ya están definidos dentro del Charmódulo. Producirá la siguiente salida:

Different methods of Char Module
'A'
["Let","us","study","tonight"]
'a'

Módulo de mapa

Mapes un tipo de datos de tipo de par de valor agregado sin clasificar. Es un módulo ampliamente utilizado con muchas funciones útiles. El siguiente ejemplo muestra cómo puede utilizar una función predefinida disponible en el 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)

Producirá la siguiente salida:

fromList [(1,[1]),(2,[2]),(3,[3])]

Configurar módulo

El módulo Set tiene algunas funciones predefinidas muy útiles para manipular datos matemáticos. Un conjunto se implementa como un árbol binario, por lo que todos los elementos de un conjunto deben ser únicos.

Eche un vistazo al siguiente código de ejemplo

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)

Aquí, estamos modificando una cadena en un conjunto. Producirá la siguiente salida. Observe que el conjunto de salida no tiene repetición de caracteres.

fromList " Hbdeuy"
fromList " HTaefhiklorstu"

Módulo personalizado

Veamos cómo podemos crear un módulo personalizado que se pueda llamar en otros programas. Para implementar este módulo personalizado, crearemos un archivo separado llamado"custom.hs" junto con nuestro "main.hs".

Creemos el módulo personalizado y definamos algunas funciones en él.

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

Nuestro módulo personalizado está listo. Ahora, importémoslo a un programa.

main.hs

import Custom 

main = do 
   print(showEven 4) 
   print(showBoolean True)

Nuestro código generará la siguiente salida:

True
1

los showEven devuelve la función True, ya que "4" es un número par. losshowBoolean La función devuelve "1" ya que la función booleana que pasamos a la función es "Verdadero".