我想完成这样的事情,但我不能完全理解语法。
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
答案 0 :(得分:1)
嗯,像'a -> 'a s
这样的类型是有道理的。您可以看到参数如何工作。像('a -> 'a s) -> 'c t
这样的类型对我来说没有意义。我没看到'c
类型应该来自哪里。 'a -> 'b s
也是如此。我看不出'b
应该来自哪里。像这样的类型通常与实际上根本不返回的代码相关联(未定义的代码,引发异常的代码等)。
(非常)可能有一些我不理解的GADT的微妙之处,但也许至少会有所帮助。