映射受约束的存在限定高阶类型
Mapping over constrained existentially qualified higher order type
希望我的术语正确。
我想执行以下操作:
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 似乎无法正确推断约束并抱怨:
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)
还要避免使用“$”,因为它会破坏多态性。
希望我的术语正确。
我想执行以下操作:
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 似乎无法正确推断约束并抱怨:
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)
还要避免使用“$”,因为它会破坏多态性。