haskell-jp / questions #98 at 2021-09-07 04:25:34 +0900

お疲れ様です。
pythonとかのfor文 とbreak / continue / returnのコード(for ループから脱出するコード)をhaskellに持ってくる場合に
再帰をつかわないならthrow, catchしかないですかね。
(それで置き換えている人はひとはみたことがないですが。)
初学者ではよく変数の代入が問題になりますが、
このあたり(for文)を初学者は悩んでないのか、どう折り合いをつけているのか気になっております。
ocamlさんもscalaさんもfor ループから脱出するという概念がないようですね。
https://ocaml.org/learn/tutorials/if_statements_loops_and_recursion.ja.html
https://scala-text.github.io/scala_text/control-syntax.html
for文を再帰に置き換えるテンプレとかあるのでしょう?
Haskellで例外を出してしまうと、まっとうな方法ではIOの文脈でしかキャッチできないので例外でどうこうするのはあんまり見たことが無いですね
Cont とかも良いですが、再帰の場合は明示的に次を呼び出さないとループにならないので次を呼び出さずに打ち切るとか、 unfoldr でNothingを返すとか、 Nothing を返すようにして takeWhile するとかですかね
EitherTforM_ するとかもアリかもしれないですね
breakやreturnはできそうですが、continueは難しそうですね。