OCaml抽象类型函数

时间:2014-01-19 16:17:56

标签: 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

1 个答案:

答案 0 :(得分:1)

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

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