Tra i linguaggi di pro­gram­ma­zio­ne fun­zio­na­le, Haskell svolge un ruolo speciale. Infatti, dalla de­fi­ni­zio­ne della prima versione nel 1990, Haskell è con­si­de­ra­to quasi come uno standard per i linguaggi di pro­gram­ma­zio­ne che seguono il paradigma di pro­gram­ma­zio­ne fun­zio­na­le. Non a caso tanti altri linguaggi fun­zio­na­li sono in­fluen­za­ti da Haskell. Imparare questo lin­guag­gio di pro­gram­ma­zio­ne all’inizio può risultare alquanto fru­stran­te, so­prat­tut­to perché i concetti di pro­gram­ma­zio­ne fun­zio­na­le appaiono molto singolari agli occhi degli utenti inesperti. Una volta superate le prime dif­fi­col­tà, però, anche i prin­ci­pian­ti saranno in grado di tuffarsi con successo nel mondo della pro­gram­ma­zio­ne con Haskell.

Nel seguente tutorial vi pre­sen­te­re­mo la modalità più semplice per iniziare, vi il­lu­stre­re­mo i singoli passaggi e vi spie­ghe­re­mo come in­stal­la­re il lin­guag­gio fun­zio­na­le e il fun­zio­na­men­to preciso della pro­gram­ma­zio­ne con Haskell.

In­stal­la­re e avviare Haskell: come funziona

Come per tanti altri linguaggi di pro­gram­ma­zio­ne, anche con Haskell si hanno varie opzioni per preparare il proprio sistema al lavoro con questo lin­guag­gio di pro­gram­ma­zio­ne. La soluzione più usata di tutte, per imparare e pro­gram­ma­re fa­cil­men­te con questo lin­guag­gio, è GHCi. Si tratta di un ambiente di sviluppo in­te­rat­ti­vo pronto all’uso, di­spo­ni­bi­le con il pacchetto Glasgow Haskell Compiler. Oltre al com­pi­la­to­re, sono ne­ces­sa­rie anche le librerie di Haskell, per le quali avrete bisogno di un building software come Cabal o Stack.

N.B.

La com­bi­na­zio­ne del com­pi­la­to­re di Haskell e il cor­ri­spon­den­te sistema di sviluppo si definisce anche piat­ta­for­ma Haskell.

Per co­min­cia­re nel modo più semplice possibile, con­si­glia­mo di in­stal­la­re la piat­ta­for­ma Haskell completa. Sul sito ufficiale del progetto Haskell potete trovare i file d’in­stal­la­zio­ne pronti all’uso per Windows, macOS e diverse di­stri­bu­zio­ni di Linux da scaricare gra­tui­ta­men­te.

Nei sistemi di Linux potete in­tra­pren­de­re il percorso d’in­stal­la­zio­ne anche at­tra­ver­so il gestore di pacchetti. Se siete utenti di Ubuntu o Debian, digitate il seguente comando nel terminale:

sudo apt-get install haskell-platform

Una volta concluso il processo d’in­stal­la­zio­ne, dovreste riuscire ad avviare l’ambiente di sviluppo in­te­rat­ti­vo digitando il comando “ghci” nella riga di comando del vostro sistema. Con Windows, questo avviene tramite il Po­wer­Shell, con­si­glia­to anche per l’in­stal­la­zio­ne.

N.B.

Tenete conto del fatto che le versioni della piat­ta­for­ma Haskell nel gestore di pacchetti non sono sempre le più ag­gior­na­te. In alcune cir­co­stan­ze può anche essere ne­ces­sa­rio un ag­gior­na­men­to dei file d’in­stal­la­zio­ne!

Conoscere Haskell: com­pren­de­re i tipi di dati fon­da­men­ta­li

Haskell è un lin­guag­gio puramente fun­zio­na­le, fattore che lo rende molto più in­te­rat­ti­vo e in­tel­li­gen­te rispetto ad altri linguaggi di pro­gram­ma­zio­ne. Tipi di dati come numeri, lettere o valori logici (booleani) su Haskell sono già pre­de­fi­ni­ti o ripartiti in modo in­tel­li­gen­te dalla memoria del computer.

Numeri su Haskell

Haskell riconosce i numeri naturali come tali. Sul piano concreto questo significa che nel codice di Haskell non dovrete definire al momento dell’input che si tratta di un numero. Una volta avviato l’ambiente di sviluppo, potrete svolgere sem­pli­ce­men­te dei calcoli con i soliti operatori come il più (+) o il meno (-). Digitate ad esempio “2+2” e con­fer­ma­te l’input con il tasto Invio:

Prelude> 2+2

Haskell vi pre­sen­te­rà il risultato di questo calcolo arit­me­ti­co: 4.

Lettere su Haskell

Haskell può ri­co­no­sce­re anche le lettere in modo in­tel­li­gen­te, come vi di­mo­stria­mo di seguito con un esempio. In primo luogo inseriamo nella riga di comando l’opzione “:t”. Questo permette alla riga di comando di indicare il tipo di dato da emettere dopo la conferma. Dopo aver lasciato uno spazio bianco, inserite una lettera a piacere tra vir­go­let­te singole o doppie e inviate l’input premendo il tasto Invio:

Prelude>:t "a"

In questo caso, il risultato indicherà cor­ret­ta­men­te “[Char]” ab­bre­via­zio­ne del termine inglese “character” (in italiano: lettera).

Stringhe su Haskell

Haskell riesce a ri­co­no­sce­re senza problemi anche le stringhe, che nei linguaggi di pro­gram­ma­zio­ne sono co­no­sciu­te so­prat­tut­to con il termine inglese “strings”. Anche in questo caso non è richiesta una sintassi specifica, vi basterà inserire la stringa tra vir­go­let­te. Un esempio è l’input seguente composto da numeri e lettere:

Prelude>:t "12345abcde"

Visto che anche qui abbiamo inserito l’opzione “:t”, Haskell ci co­mu­ni­che­rà nuo­va­men­te di che tipo di dato si tratta. Come nel caso della lettera singola, la riga di comando indicherà “[Char]”.

Conoscere Haskell: pre­sen­ta­zio­ne delle ope­ra­zio­ni più im­por­tan­ti

Come già an­ti­ci­pa­to, Haskell si presta allo svol­gi­men­to delle ope­ra­zio­ni al­ge­bri­che più comuni (addizione, sot­tra­zio­ne, divisione e mol­ti­pli­ca­zio­ne). Si può anche usare l'o­pe­ra­to­re di sequenza o di gamma per elencare fa­cil­men­te le sequenze di valori.

N.B.

Per eseguire e mostrare i risultati dei seguenti codici snippet in questo tutorial su Haskell, abbiamo uti­liz­za­to l’ambiente di sviluppo web Online Haskell Compiler.

Addizioni su Haskell

Anche l’operatore di addizione per il calcolo di due o più valori è indicato su Haskell con il classico simbolo più (+). Nel seguente esempio di codice, che in­se­ri­re­mo nel file main.hs, con l’aiuto della con­di­zio­ne “let” uniamo due variabili (“var1” e “var2”) che dovranno essere sommate tra loro. La riga di comando pre­sen­te­rà infine il risultato sotto forma di un messaggio di testo, definito nella con­di­zio­ne “putStrLn”:

main = do
let var1 = 2
let var2 = 3
putStrLn "Il risultato delle due cifre sommate tra loro."
print(var1 + var2)

Nello strumento online sopra men­zio­na­to, vedrete l’input (finestra a sinistra) e l’output (finestra a destra) come mostrato di seguito:

Sot­tra­zio­ni su Haskell

Per indicare a Haskell di sottrarre un valore numerico ad un altro, bisogna usare il classico operatore di sot­tra­zio­ne, vale a dire il simbolo meno (-). Il seguente esempio di codice è molto simile a quello usato per le addizioni, bisogna sem­pli­ce­men­te so­sti­tui­re l’operatore e mo­di­fi­ca­re leg­ger­men­te il messaggio di output:

main = do
let var1 = 2
let var2 = 3
putStrLn "Il risultato della sottrazione tra i due numeri è:"
print(var1 - var2)
N.B.

Anche per le ope­ra­zio­ni di divisione e mol­ti­pli­ca­zio­ne, Haskell utilizza i simboli più comuni: con lo slash o barra (/) potrete dividere i valori, con il simbolo dell’asterisco (*) in­di­che­re­te a Haskell di mol­ti­pli­ca­re i valori.

Elenco di valori su Haskell

L’operatore di sequenza è un operatore speciale di Haskell che vi permette in modo semplice di di­chia­ra­re un elenco con una sequenza di valori, e si indica con “[..]”. Se volete ad esempio che Haskell vi mostri tutti i numeri da 1 a 10, potete indicare per questo spettro numerico l’input “[1..10]”. Lo stesso vale per le lettere: con “[a..z]”, ad esempio, darete l’input affinché Haskell emetta l’intero alfabeto. Anche per l’operatore di sequenza abbiamo preparato un semplice esempio:

main ::IO()
main = do
print [1..10]

Haskell: come di­chia­ra­re e definire le funzioni

Haskell è un lin­guag­gio puramente fun­zio­na­le. Non sarà dunque una grande sorpresa scoprire che le funzioni svolgono un ruolo fon­da­men­ta­le nella pro­gram­ma­zio­ne con Haskell. Come tanti altri linguaggi, anche Haskell ha un suo modo per di­chia­ra­re e definire le funzioni.

N.B.

La di­chia­ra­zio­ne di una funzione sug­ge­ri­sce al com­pi­la­to­re l’esistenza di una funzione precisa. Inoltre, gli indica i parametri da attendere e l’aspetto che dovrà avere l’output. La de­fi­ni­zio­ne di una funzione definisce l’in­clu­sio­ne effettiva della funzione nel codice.

Per rendere il concetto di funzione con Haskell ancora più com­pren­si­bi­le, guardiamo di nuovo un esempio concreto di codice:

add ::Integer -> Integer -> Integer   --function declaration
add x y =  x + y                       --function definition
main = do
putStrLn "La somma dei due numeri è: "
print(add 3 5)    --calling a function

Nella prima riga del codice è di­chia­ra­ta la funzione: tutti e tre i valori della funzione (input e output) sono numeri interi (Integer). Nella riga 2 si definisce la funzione: vengono sommati i due argomenti “x” e “y”. Con il metodo main”, già an­ti­ci­pa­to, si procederà alla com­pi­la­zio­ne del codice e l’in­di­ca­zio­ne del risultato della funzione per entrambi i valori di input “3” e “5”.

Nel seguente tutorial YouTube per prin­ci­pian­ti, troverete una pa­no­ra­mi­ca ancora più ap­pro­fon­di­ta sul lavoro con le funzioni di Haskell:

AtsPtAf2avQ.jpg Per visualizzare questo video, sono necessari i cookie di terze parti. Puoi accedere e modificare le impostazioni dei cookie qui.

Altri consigli per conoscere e pro­gram­ma­re con Haskell

Haskell è un lin­guag­gio molto popolare perciò online troverete molti manuali, tutorial e forum di aiuto. Vi con­si­glia­mo ad esempio la serie di tutorial YouTube “Haskell for Im­pe­ra­ti­ve Pro­gram­mers” di Philipp Ha­gen­lo­cher, che riassume le com­po­nen­ti più im­por­tan­ti del lin­guag­gio fun­zio­na­le nei 30 video in cui tratta diverse tematiche su Haskell. Un’ampia pa­no­ra­mi­ca per trovare ulteriore as­si­sten­za nel web è fornita dalla Community del sito ufficiale di Haskell. Con­si­glia­mo agli amanti della carta stampata di investire nel libro “Haskell from the very beginning” di John Whi­ting­ton.

Se uti­liz­za­te l’ambiente di sviluppo ghci, mentre imparate a usare Haskell potete farvi mostrare una pa­no­ra­mi­ca completa di tutti i comandi di­spo­ni­bi­li. Vi basta digitare il seguente codice nella riga di comando e con­fer­ma­re l’input con il tasto invio:

Prelude>:?
Vai al menu prin­ci­pa­le