Functional programming OCaml抽象类型函数

Functional programming OCaml抽象类型函数,functional-programming,ocaml,gadt,Functional Programming,Ocaml,Gadt,我想完成这样的事情,但是我不能完全理解语法 type _ s = Var : 'a -> 'a s type _ t = | AA :('a -> 'a s) -> 'c t | AB : ('a -> 'b s) -> 'c t let apply_to x = function | AA g -> g x | AB g -> g x 嗯,像'a->'a s这样的类型是有意义的。您可以看到参数将如何工作。像('A->'A-s)->'c-t这样的类型

我想完成这样的事情,但是我不能完全理解语法

type _ s = Var : 'a -> 'a s
type _ t = 
| AA :('a -> 'a s) -> 'c t
| AB : ('a -> 'b s) -> 'c t
let apply_to x = function
| AA g -> g x
| AB g -> g x

嗯,像
'a->'a s
这样的类型是有意义的。您可以看到参数将如何工作。像
('A->'A-s)->'c-t
这样的类型(对我来说)没有意义。我不知道
'c
类型应该来自哪里。这同样适用于
'a->'bs
。我不知道
'b
应该来自哪里。像这样的类型通常与实际上根本不返回的代码(未定义的代码、引发异常的代码等)相关联


(非常)可能有一些我不理解的gadt的微妙之处,但也许这至少会有一点帮助。

所以我想我要做的是在gadt中有一个可以应用的函数类型。