しばしば私はHaskellの中反復(Cのようにcontinue
)の残りの部分をスキップする必要性に自分自身を発見した:`Monad`ループで「続ける」方法は?
forM_ [1..100] $ \ i ->
a <- doSomeIO
when (not $ isValid1 a) <skip_rest_of_the_iteration>
b <- doSomeOtherIO a
when (not $ isValid2 b) <skip_rest_of_the_iteration>
...
はしかし、私はそうする簡単な方法を見つけることができませんでした。私が知っている唯一の方法はおそらくTrans.Maybe
ですが、それほど簡単なものを実現するためにはモナド変換を使う必要がありますか?
:Ørjan・ヨハンセンの有益な助言@使用
は、ここに簡単な例です。私が見た中で最も興味深いのはおそらくhttps://hackage.haskell.org/package/loops – dfeuer
です。モナド・トランスは決して便利ではありません。 –