Onze rudimentaire interpreter is niet erg praktisch in gebruik. Telkens als er iets misgaat krijgen we simpelweg de string "<wrong>" te zien.

> test (App (Add (Var "X") (Var "Y")) (Con 2))
"<wrong>"

> test (App (Con 2) (Con 4))
"<wrong>"

Het zou dus beter zijn om specifieke foutboodschappen te tonen. Aangezien onze interpreter monadisch geïmplementeerd is kunnen we deze functionaliteit snel toevoegen! Hieronder staat het datatype voor de errormonad:

data E a = Success a | Error String

We gebruiken Success a voor een correcte uitvoering en Error String indien er iets misloopt. Het enige dat we dus hoeven te doen is de errormonad definiëren en overal waar we specifieke fouten willen signaleren Error "String" toevoegen. In de code hieronder hebben we reeds specifieke fouten toegevoegd het is aan jou om de definitie van de Error monad af te werken. Na je aanpassingen zou je interpreter de volgende foutenboodschappen moeten tonen:

> test (App (Add (Var "X") (Var "Y")) (Con 2))
"Error: Variable "X" niet gevonden in de omgeving"

> test (App (Con 2) (Con 4))
"Error: Waarde '2' kan niet gebruikt worden als functie"