这只是一个测试,所以我不太关心,但我有这些定义:
type z
type _ s
type (_, _, _) balance =
| Less : (*∀'a.*) ('a, 'a s, 'a s) balance
| Same : (*∀'b.*) ('b, 'b, 'b) balance
| More : (*∀'a.*) ('a s, 'a, 'a s) balance
type _ aVL =
| Leaf : z aVL
| Node : (*∀'a, 'b, 'c.*)('a, 'b, 'c) balance * 'a aVL * int * 'b aVL ->
('c s) aVL
我收到“type _ aVL =”的错误:
Error: In this definition, a type variable cannot be deduced
from the type parameters.
怎么办?
答案 0 :(得分:4)
H / T到Gabriel Scherer回答 caml-list 。
不要使用这种抽象类型定义。使用替代(和导出)具体定义(即使你不使用它们的构造函数)
type 'a s = S of 'a
(或只是
type 'a s = S
)他们具有“更好”的注入属性。我们已经在邮件列表中提到了几次,这也是雅克·加里格在9月举行的OCaml研讨会上的“简单的外卖课”。
因为我没有谷歌搜索问题而感到羞耻。这里解决了确切的问题:GADTs : a type variable cannot be deduced