OCaml に break は必要?

OCamlってbreakがないんですよね。ということを id:ytqwerty:20080311#p1 を読んで改めて思いました。これまで私は break が欲しいと思ったことがなかったので、あまり意識したことがありませんでした。なぜ欲しいと思わなかったんでしょう?よく分かんないや。

まぁそれはさておき、Mapは良く分かんないからSetではこういう案はどうでしょう。

module CharSet = Set.Make(Char)

let s = List.fold_right CharSet.add ['A'; 'B'; 'C'; 'D'; 'E'] CharSet.empty;;

(* 普通にfold版 *)
CharSet.fold (fun elt -> function
  | true -> if elt = 'C' then false else (print_char elt; true)
  | false -> false
) s true;;

(* ローカルな例外?版 *)
let _ =
  let module M = struct exception Break end in
  try
    CharSet.iter (function
      | 'C' -> raise M.Break
      | elt -> print_char elt
    ) s
  with M.Break -> ()

うーん、ダメなんでしょうね、きっと。というかそもそもSetはこういうのに使うべきではない(と私は信じているのですがこの思い込みもひょっとしてどうなの?)のだろうから素直にListで再帰しちゃうのが良いような気がします。Listならbreakが欲しい場面もそうそうないのではないかと思うのですが、どうなのでしょう。要るのかな?