Sono abbastanza nuovo per Haskell e ho cominciato lentamente a pensare che ci sia qualcosa di sbagliato nell'esistenza di Monad. Real World Haskell warns against its use ("Ancora una volta, ti consigliamo di evitare quasi sempre l'errore!"). Ho appena notato oggi che Ross Paterson l'ha definita "una verruca, non un motivo di progettazione" back in 2008 (e sembrava avere un po 'di accordo in quel thread).Devo evitare di usare Monad fallire?
Mentre guardavo il dottor Ralf Lämmel talk on the essence of functional programming, ho iniziato a capire una possibile tensione che potrebbe aver portato al fallimento di Monad. Nella conferenza, Ralf parla dell'aggiunta di vari effetti monadici a un parser monadico di base (registrazione, stato, ecc.). Molti degli effetti richiedevano modifiche al parser di base e talvolta ai tipi di dati utilizzati. Ho pensato che l'aggiunta di "fail" a tutte le monadi potrebbe essere stato un compromesso perché "fail" è così comune e si desidera evitare le modifiche al parser "base" (o qualsiasi altra cosa) il più possibile. Ovviamente, una sorta di "fail" ha senso per i parser ma non sempre, per esempio, mette/ottieni di stato o chiedi/local di Reader.
Fammi sapere se potrei essere sulla strada sbagliata.
Devo evitare di usare Monad fallire? Quali sono le alternative a Monad fallite? Ci sono delle librerie monad alternative che non includono questa "verruca design"? Dove posso leggere di più sulla storia di questa decisione progettuale?
[Real World Haskell dice] (http://book.realworldhaskell.org/read/monads.html#monads.monad.fail) "[in molte monadi]' fail' usa 'error'. Chiamando' error' di solito è altamente indesiderabile, poiché genera un'eccezione che i chiamanti non possono prendere o non si aspetteranno. " – Miikka
Risposta breve: sì. –
Credo che "fail" sia necessario per gestire i fallimenti della corrispondenza dei pattern quando ci si comporta così: "Just x <- somethingReturningIoMaybe". –