私は ocaml タイプを持っています:
type t = A | B | ...
およびそのタイプに関するものを出力する関数:
let pp_t fmt x = match x with
| A -> Format.fprintf fmt "some nice explanations about A"
| B -> Format.fprintf fmt "some nice explanations about B"
| ...
すべての説明を出力する関数を作成するにはどうすればよいですか? に相当するもの:
let pp_all_t fmt =
Format.fprintf fmt A;
Format.fprintf fmt B;
...
ただし、新しいコンストラクターを追加するのを忘れると、警告が表示されます。t
私の問題は、静かで大きく、大きく変化することであるため、その機能を自動的に構築するものがあるとさらに良いでしょう。
型コンストラクターで「反復」する方法を想像できませんが、おそらくトリックがあります...
編集:私が最終的にやったことは:
type t = A | B | ... | Z
let first_t = A
let next_t = function A -> B | B -> C | ... | Z -> raise Not_found
let pp_all_t fmt =
let rec pp x = pp_t fmt x ; try let x = next_t x in pp x with Not_found -> ()
in pp first_t
そのため、 を更新すると、コンパイラは、 と を更新する必要があり、を変更する必要はないことt
を警告します。アドバイスをありがとうございました。pp_t
next_t
pp_all_t