Haskell - Moduli
Se hai lavorato su Java, allora sapresti come tutte le classi sono legate in una cartella chiamata package. Allo stesso modo, Haskell può essere considerato come una raccolta di filemodules.
Haskell è un linguaggio funzionale e tutto è indicato come un'espressione, quindi un modulo può essere chiamato come una raccolta di tipi di funzioni simili o correlati.
Puoi importuna funzione da un modulo a un altro modulo. Tutte le istruzioni "import" dovrebbero venire prima prima di iniziare a definire altre funzioni. In questo capitolo, impareremo le diverse caratteristiche dei moduli Haskell.
Modulo elenco
List fornisce alcune meravigliose funzioni con cui lavorare listtipo di dati. Una volta importato il modulo List, hai a disposizione un'ampia gamma di funzioni.
Nell'esempio seguente, abbiamo utilizzato alcune importanti funzioni disponibili nel modulo 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])
Qui abbiamo molte funzioni senza nemmeno definirle. Questo perché queste funzioni sono disponibili nel modulo List. Dopo aver importato il modulo List, il compilatore Haskell ha reso disponibili tutte queste funzioni nello spazio dei nomi globale. Quindi, potremmo usare queste funzioni.
Il nostro codice produrrà il seguente output:
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]
Modulo Char
Il Charha molte funzioni predefinite per lavorare con il tipo di carattere. Dai un'occhiata al seguente blocco di codice:
import Data.Char
main = do
putStrLn("Different methods of Char Module")
print(toUpper 'a')
print(words "Let us study tonight")
print(toLower 'A')
Qui, le funzioni toUpper e toLower sono già definiti all'interno del file Charmodulo. Produrrà il seguente output:
Different methods of Char Module
'A'
["Let","us","study","tonight"]
'a'
Modulo mappa
Mapè un tipo di dati di tipo coppia a valore aggiunto non ordinato. È un modulo ampiamente utilizzato con molte funzioni utili. L'esempio seguente mostra come utilizzare una funzione predefinita disponibile nel modulo Mappa.
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)
Produrrà il seguente output:
fromList [(1,[1]),(2,[2]),(3,[3])]
Imposta modulo
Il modulo Set ha alcune funzioni predefinite molto utili per manipolare dati matematici. Un insieme è implementato come un albero binario, quindi tutti gli elementi in un insieme devono essere univoci.
Dai un'occhiata al seguente codice di esempio
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)
Qui stiamo modificando una stringa in un set. Produrrà il seguente output. Si noti che il set di output non ha ripetizioni di caratteri.
fromList " Hbdeuy"
fromList " HTaefhiklorstu"
Modulo personalizzato
Vediamo come possiamo creare un modulo personalizzato che può essere chiamato in altri programmi. Per implementare questo modulo personalizzato, creeremo un file separato chiamato"custom.hs" insieme al nostro "main.hs".
Creiamo il modulo personalizzato e definiamo alcune funzioni in esso.
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
Il nostro modulo personalizzato è pronto. Ora, importiamolo in un programma.
main.hs
import Custom
main = do
print(showEven 4)
print(showBoolean True)
Il nostro codice genererà il seguente output:
True
1
Il showEven restituisce la funzione True, poiché "4" è un numero pari. IlshowBoolean funzione restituisce "1" poiché la funzione booleana che abbiamo passato alla funzione è "True".