约束种类不一致



我想使用自定义约束来帮助遏制组合爆炸:

{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
class DifferentTypes a b
type DifferentTypes3 a b c = (DifferentTypes a b, DifferentTypes b c, DifferentTypes a c)

当我使用自定义约束时,此代码无法编译:

class Foo a
class Bar a
instance (DifferentTypes3 a b c, Bar a, Bar b, Bar c) => Foo (a, b, c)

但是当我手动写出我的约束时,它会编译:

class Foo a
class Bar a
instance (DifferentTypes a b, DifferentTypes b c, DifferentTypes a c, Bar a, Bar b, Bar c) => Foo (a, b, c)

这是一个错误,还是我错过了什么?

修复 GHC 工单 #8359 后,您的原始代码(使用 ConstraintKinds )现在按预期进行类型检查,无需UndecidableInstances

最新更新