ocaml GADT:为什么“键入a”。需要?

时间:2015-10-24 05:17:49

标签: ocaml gadt locally-abstract-type

ocaml manual的第7.20节的GADT基本示例中,'type a'的含义是什么? ? 为什么宣称“eval:一个术语 - > a”还不够?

type _ term =
          | Int : int -> int term
          | Add : (int -> int -> int) term
          | App : ('b -> 'a) term * 'b term -> 'a term

        let rec eval : type a. a term -> a = function
          | Int n    -> n                 (* a = int *)
          | Add      -> (fun x y -> x+y)  (* a = int -> int -> int *)
          | App(f,x) -> (eval f) (eval x)

1 个答案:

答案 0 :(得分:5)

Jacque的slide在ML' 2011研讨会上有一个很好的介绍。使用本地抽象类型的语法来引入通用表达式范围变量的想法。