Haskell - Modules

Si vous avez travaillé sur Java, vous saurez comment toutes les classes sont liées dans un dossier appelé package. De même, Haskell peut être considéré comme une collection demodules.

Haskell est un langage fonctionnel et tout est désigné comme une expression, par conséquent un module peut être appelé comme une collection de types de fonctions similaires ou liés.

Vous pouvez importune fonction d'un module vers un autre module. Toutes les instructions "import" doivent venir en premier avant de commencer à définir d'autres fonctions. Dans ce chapitre, nous allons apprendre les différentes fonctionnalités des modules Haskell.

Module de liste

List fournit de merveilleuses fonctions avec lesquelles travailler listtaper des données. Une fois que vous avez importé le module Liste, vous disposez d'un large éventail de fonctions.

Dans l'exemple suivant, nous avons utilisé certaines fonctions importantes disponibles dans le module Liste.

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])

Ici, nous avons de nombreuses fonctions sans même les définir. En effet, ces fonctions sont disponibles dans le module Liste. Après avoir importé le module List, le compilateur Haskell a rendu toutes ces fonctions disponibles dans l'espace de noms global. Par conséquent, nous pourrions utiliser ces fonctions.

Notre code donnera la sortie suivante -

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]

Module de caractères

le CharLe module a de nombreuses fonctions prédéfinies pour fonctionner avec le type Character. Jetez un œil au bloc de code suivant -

import Data.Char 

main = do  
   putStrLn("Different methods of Char Module") 
   print(toUpper 'a') 
   print(words "Let us study tonight") 
   print(toLower 'A')

Ici, les fonctions toUpper et toLower sont déjà définis dans le Charmodule. Il produira la sortie suivante -

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

Module de carte

Mapest un type de données de type paire à valeur ajoutée non triée. C'est un module largement utilisé avec de nombreuses fonctions utiles. L'exemple suivant montre comment utiliser une fonction prédéfinie disponible dans le module Carte.

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)

Il produira la sortie suivante -

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

Définir le module

Le module Set a des fonctions prédéfinies très utiles pour manipuler des données mathématiques. Un ensemble est implémenté sous la forme d'un arbre binaire, de sorte que tous les éléments d'un ensemble doivent être uniques.

Jetez un œil à l'exemple de code suivant

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)

Ici, nous modifions une chaîne en un ensemble. Il produira la sortie suivante. Observez que l'ensemble de sortie n'a pas de répétition de caractères.

fromList " Hbdeuy"
fromList " HTaefhiklorstu"

Module personnalisé

Voyons comment nous pouvons créer un module personnalisé qui peut être appelé dans d'autres programmes. Pour implémenter ce module personnalisé, nous allons créer un fichier séparé appelé"custom.hs" avec notre "main.hs".

Créons le module personnalisé et définissons-y quelques fonctions.

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

Notre module personnalisé est prêt. Maintenant, importons-le dans un programme.

main.hs

import Custom 

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

Notre code générera la sortie suivante -

True
1

le showEven fonction renvoie True, car "4" est un nombre pair. leshowBoolean function renvoie "1" car la fonction booléenne que nous avons passée dans la fonction est "True".