Sto cercando di imparare Haskell scrivendo piccoli programmi ... quindi sto attualmente scrivendo un lexer/parser per espressioni semplici. (Sì, potrei usare Alex/Happy ... ma prima voglio imparare la lingua principale).Qual è l'alternativa alle eccezioni in una profonda ricorsione di Haskell?
Il mio parser è essenzialmente un insieme di funzioni ricorsive che costruiscono un albero. Nel caso di errori di sintassi, normalmente lancerei un'eccezione (ad esempio se scrivessi in C#), ma ciò sembra scoraggiarsi in Haskell.
Quindi qual è l'alternativa? Non voglio davvero testare gli stati di errore in ogni singolo bit del parser. Voglio finire con un albero di nodi valido o uno stato di errore con dettagli.
I programmi più grandi di Haskell nascondono questi dettagli facendo "istanza Monad (Either ErrorDetails) dove ..." in modo da non dover gestire esplicitamente il caso di errore in ciascuna funzione. –
@TomMD: Sì, ma non suggerisci "rendi tua la monade" a un nuovo discente;) – delnan
Beh, finché sa che sta solo imparando/utilizzando un quarto di Haskell ignorando monadi e trasformatori. Altrimenti avrà la falsa impressione che Haskell sia eccessivamente prolisso. –