考虑下一个声明:
:- type wrap(T) ---> wrap(T).
:- inst wrap(I) ---> wrap(I).
:- typeclass infer_wrap(A, B) <= ((A -> B)).
:- instance infer_wrap(A, wrap(A)).
水星(10.04)产生:
monad.m:011:在 `monad.infer_wrap(A, monad.wrap(A))' 的实例声明中: monad.m:011:第一个 arg 是类型变量
即使没有函数依赖,它也不允许使用类型变量声明实例。
我是否遗漏了什么或 Mercury 不允许不以地面实例结尾的实例?
有没有办法声明多态类型的实例,它是任何类型的包装器(没有约束)?也许存在一些特殊的类型类,比如all_types(T)
?