haskell-jp / beginners #19 at 2021-12-30 23:46:56 +0900

Haskellで、MonadThrowのthrowMをhspecでテストするときにcatchしたいのですが、いうならばshouldcatchのような関数はありますか?
catch するよりも下記のいずれかの方法で Either に変換するのがおすすめです。 shouldCatch が Hspecにないのもそういう背景でしょう。
1. MonadCatch のインスタンスを加えれば try を使って m (Either SomeException a) に変換できます。まぁ、テストであれば IOtry を使うのでもいいでしょう。
2. 実は Either SomeExceptionMonadThrow のインスタンスなので、 Either だけでよいのであればそれでも :ok: です。
3. また、この Either SomeException のMonad Transformer版、 CatchT というのもあります。
先日3. の方法を使ってテストを書いたので参考までに例として共有します。
https://github.com/igrep/multipost/blob/60a00b522da2ce60ff28252097f19c5d545d748b/test/MultipostSpec.hs