我有一个 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
andnext_t
并且pp_all_t
不必更改。感谢大家的建议。