, , ( , ) , , .
, , , .
:
type 'a primitives = <
add : 'a -> 'a;
mul : 'a -> 'a;
sub : 'a -> 'a;
>
, :
type op = { op : 'a . 'a -> 'a primitives -> 'a }
let map = [ "add", { op = fun d c -> c
"sub", { op = fun d c -> c
"mul", { op = fun d c -> c
: :
val map : (string * op) list
: , , . , - : " add/sub/mul" " add/sub/mul/div" ( ), , , .
, , "" . , .
, . , , , Caml. ( , a :> b, a -> b), , , , , .
, . 3.12 , , , , .
, , . , " " ( ), , .
, , . , , : .., "" . , . , , , , : , , ..
, "reified" , : , . " " , , , , . , / , , " " "n-ary operations", .