Mercury语言中类型类的多态实例

时间:2010-08-10 06:12:39

标签: typeclass mercury

考虑下一个声明:

:- type wrap(T) ---> wrap(T).
:- inst wrap(I) ---> wrap(I).

:- typeclass infer_wrap(A, B) <= ((A -> B)).
:- instance infer_wrap(A, wrap(A)).

Mercury(10.04)产生:

monad.m:011: In instance declaration for `monad.infer_wrap(A, monad.wrap(A))':
monad.m:011:   the first arg is a type variable

即使没有功能依赖,它也不允许使用类型变量声明实例 我错过了什么,或者水星不允许不以地面实例结束的实例?
有没有办法为多态类型声明实例,它是任何类型的包装器(没有约束)?也许存在一些特殊的类类如all_types(T)

1 个答案:

答案 0 :(得分:3)

简短回答:

Mercury不支持实例声明中的类型变量。 (这是编译器所抱怨的)。

答案很长:

无法创建这样的类型类实例。由于类型类对A的所有值都有效,因此根本不需要类型类。但看起来你正在尝试创建Monads,目前这是不可能的,我们没有计划在不久的将来支持它