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の型システムの制約を見てのけぞっていたんだなあ、と考えると感慨深い。人間は慣れる生き物である。これも多分慣れるんだろうなあ、すぐ。