小编Gry*_*pan的帖子

什么是GHCi的MonadError默认实现?

考虑以下测试功能:

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

在GHCi提示符下,我可以执行以下操作:

*Main> testError False :: Either String ()
Left "hello world"
*Main> testError True :: Either String ()
Right ()
Run Code Online (Sandbox Code Playgroud)

因为我已将Either String _声明为表达式的类型,所以它使用MonadError的Either String实现.我假设如果我自己没有指定MonadError的实现,或者从另一个函数调用此函数,允许类型推断,我会得到一个错误.代替:

*Main> testError True
*Main> testError False
*** Exception: user error (hello world)
Run Code Online (Sandbox Code Playgroud)

似乎GHCi提供某种"默认"错误monad.有人能解释一下这里发生了什么吗?

error-handling haskell ghci

3
推荐指数
1
解决办法
186
查看次数

标签 统计

error-handling ×1

ghci ×1

haskell ×1