次の宣言を検討してください。
:- 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:最初の引数は型変数です
関数従属性がなくても、型変数を使用してインスタンスを宣言することはできません。
私は何かが足りないのですか、それともMercuryはグラウンドインスタンスで終わらないインスタンスを許可していませんか?
(制約なしで)任意の型のラッパーであるポリモーフィック型のインスタンスを宣言する方法はありますか?たぶん、?のような特別な型クラスが存在しますall_types(T)
か?