カスタム制約を使用して、組み合わせの爆発を抑制したいと考えています。
{-# 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)
これはバグですか、それとも何か不足していますか?