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