Mercure considérer la prochaine déclaration:instances polymorphes pour classes de types en langue
:- 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) produit:
monad.m:011: In instance declaration for `monad.infer_wrap(A, monad.wrap(A))': monad.m:011: the first arg is a type variable
Même sans dépendance fonctionnelle, il ne permet pas de déclarer par exemple avec des variables de type.
Ai-je raté quelque chose ou Mercure n'autorise pas les instances qui ne se terminent pas par une instance au sol?
Existe-t-il un moyen de déclarer une instance pour un type polymorphe qui est un wrapper pour n'importe quel type (sans contraintes)? Peut-être existe-t-il une classe de type spécial comme all_types(T)
?