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)'约束来实现它,谢谢! –