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)
這在某種程度上可能嗎?
嘗試將'$'更改爲普通圓括號。 – Clinton
這是不可能的。如錯誤消息所示,函數'f'需要一個'(ToJSON(b b1))'約束,它不是由'(Hide a)'上的模式匹配提供的。錯誤消息中的「上下文」給出了實際提供的約束條件。 你能否提供更多關於你想要做什麼的細節? –
最終我通過刪除'A.ToJSON(a b)'約束來實現它,謝謝! –