Error Monads the Hard Way