Часто мне приходилось пропускать оставшуюся часть итерации (например, continue
в C) в Haskell:
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
, но нужно ли использовать преобразование монады для достижения чего-то такого тривиального?