-1

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

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
4

1 回答 1

1

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

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

于 2014-01-19T18:04:28.577 回答