G'Caml
genericへの制約がすごい。
# let rec print = generic | print_int | print_float | : 'a list -> unit => function [] -> () | x::xs -> print x; print xs;; val print : [| int -> unit | float -> unit | { 'b -> unit < 'a, 'b list -> unit < 'a } => 'b list -> unit |] as 'a = <generic>
とか。
数ヶ月前までは、OCamlのPolymorphic Variantの型システムの制約を見てのけぞっていたんだなあ、と考えると感慨深い。人間は慣れる生き物である。これも多分慣れるんだろうなあ、すぐ。