What is the default GHCi implementation of MonadError?

Consider the following test function:

testError :: (Error e, MonadError e m) => Bool -> m ()
testError True  = return ()
testError False = throwError $ strMsg "hello world"

At the GHCi prompt, I can do the following:

*Main> testError False :: Either String ()
Left "hello world"
*Main> testError True :: Either String ()
Right ()

Because I pointed out that as the type of the String _ expression, it uses the String MonadError implementation. I assumed that if I did not define the implementation of MonadError myself, or called this function from another function, allowing me to enter a type, I would get an error. Instead of this:

*Main> testError True
*Main> testError False
*** Exception: user error (hello world)

It seems that GHCi provides some "monastic" monad error. Can someone explain what is going on here?

+3
source share
1 answer

, GHCi, : print, - , -. - , typechecks IO MonadError.

+13

Source: https://habr.com/ru/post/1754436/


All Articles