2

I want to use custom constraints to help curb combinatorial explosion:

{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}

class DifferentTypes a b
type DifferentTypes3 a b c = (DifferentTypes a b, DifferentTypes b c, DifferentTypes a c)

When I use my custom constraint, this code fails to compile:

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

But when I instead manually write out my constraints, it compiles:

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)

Is this a bug, or am I missing something?

Mikhail Glushenkov
  • 14,928
  • 3
  • 52
  • 65
Thomas Eding
  • 35,312
  • 13
  • 75
  • 106

1 Answers1

0

With GHC ticket #8359 fixed, your original code (using ConstraintKinds) now typechecks as expected without UndecidableInstances.

Cactus
  • 27,075
  • 9
  • 69
  • 149