1
私は用語が正しいことを願っています。制約のある現実的に修飾された高次型のマッピング
私は次の操作を実行したい:
data Hide a = ∀ b. (A.ToJSON (a b), A.ToJSON b) ⇒ Hide (a b)
mapHide ∷ (∀ c. (A.ToJSON (b c), A.ToJSON c) ⇒ a c → b c) → Hide a → Hide b
mapHide f (Hide a) = (Hide $ f a)
残念ながら、GHCは一見右の制約をinfereとして文句を言うことはできません。
Could not deduce (A.ToJSON (b b1)) arising from a use of ‘Hide’
from the context (A.ToJSON (a b1), A.ToJSON b1)
はこの何とか可能ですか?
(A.ToJSON (b c2), A.ToJSON c2) ⇒
(∀ c. (A.ToJSON (a c), A.ToJSON c) ⇒ a c)
→ b c2)
またそれが多型を殺すとして「$」を使用しないよう:
'$'を通常の括弧に変更してください。 – Clinton
これは不可能です。エラーメッセージで示唆されているように、関数 'f'は'(ToJSON(b b1)) '制約を必要とします。これは'(Hide a) 'のパターンマッチングでは提供されません。エラーメッセージの「コンテキスト」は、実際に提供される制約を示します。 あなたがしようとしていることの詳細を教えてください。 –
最終的に私は 'A.ToJSON(a b)'制約を削除して動作させました。ありがとう! –