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) 

またそれが多型を殺すとして「$」を使用しないよう:

+0

'$'を通常の括弧に変更してください。 – Clinton

+0

これは不可能です。エラーメッセージで示唆されているように、関数 'f'は'(ToJSON(b b1)) '制約を必要とします。これは'(Hide a) 'のパターンマッチングでは提供されません。エラーメッセージの「コンテキスト」は、実際に提供される制約を示します。 あなたがしようとしていることの詳細を教えてください。 –

+0

最終的に私は 'A.ToJSON(a b)'制約を削除して動作させました。ありがとう! –

答えて

1

このような何かに関数型を変更すると、トリックを行う可能性があります。

関連する問題