Mercury语言中的类型类的多态实例
考虑下一个声明:
:- 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: In instance declaration for `monad.infer_wrap(A, monad.wrap(A))': monad.m:011: the first arg is a type variable
即使没有函数依赖关系,也不允许使用类型变量来声明实例。
我是否错过了某些东西,或者水星不允许不以地面实例结束的事件?
有什么办法来声明多态类型的实例,它是任何类型的包装(没有约束)? 也许存在一些像all_types(T)
这样的特殊类型类型?
简短的回答:
Mercury在实例声明中不支持类型变量。 (这是编译器抱怨的)。
长答案:
没有办法创建这样的类型实例。 由于类型类型对A的所有值都是有效的,所以根本不需要类型类型。 但看起来你正在试图创造Monad,目前这是不可能的,我们也不打算在不久的将来支持它
链接地址: http://www.djcxy.com/p/43517.html上一篇: polymorphic instances for typeclasses in Mercury language