2

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

{-# 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)

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

4

1 回答 1

0

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

于 2016-03-31T09:12:36.697 回答