{-# LANGUAGE Haskell2010 #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UnicodeSyntax #-}
module T12803a where

type Constrd a = Num a ⇒ a

data ADT a = ADT (Constrd a) ExistentiallyLost

data ExistentiallyLost = ∀ u. TC u ⇒ ExistentiallyLost u

class u ~ (ATF1 u, ATF2 u) ⇒ TC u where
    type ATF1    u ∷ *
    type ATF2    u ∷ *
    uie_handlers   ∷ ADT Int

-- Loop:
--  - ADT depends on ExistentiallyLost (also the Constrd appendage)
--  - ExistentiallyLost depends on TC
--  - TC depends on ADT
