Haskellで、MonadThrowのthrowMをhspecでテストするときにcatchしたいのですが、いうならばshouldcatchのような関数はありますか?
catch
するよりも下記のいずれかの方法で Either
に変換するのがおすすめです。 shouldCatch
が Hspecにないのもそういう背景でしょう。MonadCatch
のインスタンスを加えれば try
を使って m (Either SomeException a)
に変換できます。まぁ、テストであれば IO
の try
を使うのでもいいでしょう。Either SomeException
も MonadThrow
のインスタンスなので、 Either
だけでよいのであればそれでも :ok: です。Either SomeException
のMonad Transformer版、 CatchT
というのもあります。