Haskell:
Utilizzo di un debugger

Come fare:

Facciamo una passeggiata con GHCi, l’ambiente interattivo di Haskell che può fungere da debugger di base. Lo avvii con il tuo codice Haskell e inizi a curiosare. Ecco un esempio:

main :: IO ()
main = do
    putStrLn "Ehi, come ti chiami?"
    name <- getLine
    putStrLn $ "Ciao, " ++ name ++ "! Proviamo a fare il debug."
    let result = buggyFunction 5
    print result

buggyFunction :: Int -> Int
buggyFunction n = n * 2 -- Fingiamo ci sia un bug qui

Per iniziare a fare il debug con GHCi:

$ ghci YourHaskellFile.hs

Imposta un breakpoint alla buggyFunction:

Prelude> :break buggyFunction

Esegui il tuo programma:

Prelude> :main
Ehi, come ti chiami?

Il tuo programma si mette in pausa alla buggyFunction. Ora puoi ispezionare le variabili, procedere passo dopo passo nel codice e valutare le espressioni.

Approfondimento:

Storicamente, la reputazione di Haskell per le funzioni pure e la digitazione forte ha portato alla convinzione che gli strumenti di debugging fossero meno critici. La realtà è diversa: i programmi complessi beneficiano sempre di buoni strumenti di debugging. GHCi fornisce comandi di debug di base. Tuttavia, per un’esperienza più visiva o per applicazioni su larga scala, si potrebbe esplorare IDE con debugger integrati, come Visual Studio Code con estensioni Haskell o il plugin Haskell di IntelliJ.

Le alternative al debugger includono l’uso di istruzioni di stampa, noto come “debugging printf,” o sfruttare il sistema di tipi forte di Haskell per rendere gli stati incorretti non rappresentabili. Tuttavia, a volte non c’è nulla che sostituisca l’avanzamento passo dopo passo nel codice.

Per quanto riguarda i dettagli implementativi, il debugger di Haskell lavora con il sistema di runtime. Può gestire breakpoint, esecuzione passo dopo passo e consentire l’ispezione delle variabili. Tuttavia, dato che Haskell viene valutato pigramente, le cose possono diventare un po’ controintuitive. Fare il debug di un programma Haskell significa spesso tenere d’occhio quando e come vengono valutate le espressioni.

Vedi anche: