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

下一篇: Haskell: how to get through 'no instance for'?