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.