packages feed

singletons-1.0: tests/compile-and-dump/Promote/Classes.ghc78.template

Promote/Classes.hs:0:0: Splicing declarations
    promote
      [d| const :: a -> b -> a
          const x _ = x
          fooCompare :: Foo -> Foo -> Ordering
          fooCompare A A = EQ
          fooCompare A _ = LT
          fooCompare _ _ = GT
          
          class MyOrd a where
            mycompare :: a -> a -> Ordering
            (<=>) :: a -> a -> Ordering
            (<=>) = mycompare
          data Foo = A | B
          
          instance MyOrd Foo where
            mycompare = fooCompare
          instance MyOrd () where
            mycompare _ = const EQ
          instance MyOrd Nat where
            Zero `mycompare` Zero = EQ
            Zero `mycompare` (Succ _) = LT
            (Succ _) `mycompare` Zero = GT
            (Succ n) `mycompare` (Succ m) = m `mycompare` n |]
  ======>
    Promote/Classes.hs:(0,0)-(0,0)
    const :: forall a b. a -> b -> a
    const x _ = x
    class MyOrd a where
      mycompare :: a -> a -> Ordering
      (<=>) :: a -> a -> Ordering
      (<=>) = mycompare
    instance MyOrd Nat where
      mycompare Zero Zero = EQ
      mycompare Zero (Succ _) = LT
      mycompare (Succ _) Zero = GT
      mycompare (Succ n) (Succ m) = (m `mycompare` n)
    instance MyOrd () where
      mycompare _ = const EQ
    data Foo = A | B
    fooCompare :: Foo -> Foo -> Ordering
    fooCompare A A = EQ
    fooCompare A _ = LT
    fooCompare _ _ = GT
    instance MyOrd Foo where
      mycompare = fooCompare
    type FooCompareSym2 (t :: Foo) (t :: Foo) = FooCompare t t
    instance SuppressUnusedWarnings FooCompareSym1 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) FooCompareSym1KindInference GHC.Tuple.())
    data FooCompareSym1 (l :: Foo) (l :: TyFun Foo Ordering)
      = forall arg. (GHC.Types.~) (KindOf (Apply (FooCompareSym1 l) arg)) (KindOf (FooCompareSym2 l arg)) =>
        FooCompareSym1KindInference
    type instance Apply (FooCompareSym1 l) l = FooCompareSym2 l l
    instance SuppressUnusedWarnings FooCompareSym0 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) FooCompareSym0KindInference GHC.Tuple.())
    data FooCompareSym0 (l :: TyFun Foo (TyFun Foo Ordering -> *))
      = forall arg. (GHC.Types.~) (KindOf (Apply FooCompareSym0 arg)) (KindOf (FooCompareSym1 arg)) =>
        FooCompareSym0KindInference
    type instance Apply FooCompareSym0 l = FooCompareSym1 l
    type ConstSym2 (t :: a) (t :: b) = Const t t
    instance SuppressUnusedWarnings ConstSym1 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) ConstSym1KindInference GHC.Tuple.())
    data ConstSym1 (l :: a) (l :: TyFun b a)
      = forall arg. (GHC.Types.~) (KindOf (Apply (ConstSym1 l) arg)) (KindOf (ConstSym2 l arg)) =>
        ConstSym1KindInference
    type instance Apply (ConstSym1 l) l = ConstSym2 l l
    instance SuppressUnusedWarnings ConstSym0 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) ConstSym0KindInference GHC.Tuple.())
    data ConstSym0 (l :: TyFun a (TyFun b a -> *))
      = forall arg. (GHC.Types.~) (KindOf (Apply ConstSym0 arg)) (KindOf (ConstSym1 arg)) =>
        ConstSym0KindInference
    type instance Apply ConstSym0 l = ConstSym1 l
    type family FooCompare (a :: Foo) (a :: Foo) :: Ordering where
      FooCompare A A = EQSym0
      FooCompare A z = LTSym0
      FooCompare z z = GTSym0
    type family Const (a :: a) (a :: b) :: a where
      Const x z = x
    type MycompareSym2 (t :: a) (t :: a) = Mycompare t t
    instance SuppressUnusedWarnings MycompareSym1 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) MycompareSym1KindInference GHC.Tuple.())
    data MycompareSym1 (l :: a) (l :: TyFun a Ordering)
      = forall arg. (GHC.Types.~) (KindOf (Apply (MycompareSym1 l) arg)) (KindOf (MycompareSym2 l arg)) =>
        MycompareSym1KindInference
    type instance Apply (MycompareSym1 l) l = MycompareSym2 l l
    instance SuppressUnusedWarnings MycompareSym0 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) MycompareSym0KindInference GHC.Tuple.())
    data MycompareSym0 (l :: TyFun a (TyFun a Ordering -> *))
      = forall arg. (GHC.Types.~) (KindOf (Apply MycompareSym0 arg)) (KindOf (MycompareSym1 arg)) =>
        MycompareSym0KindInference
    type instance Apply MycompareSym0 l = MycompareSym1 l
    type (:<=>$$$) (t :: a) (t :: a) = (:<=>) t t
    instance SuppressUnusedWarnings (:<=>$$) where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) (:<=>$$###) GHC.Tuple.())
    data (:<=>$$) (l :: a) (l :: TyFun a Ordering)
      = forall arg. (GHC.Types.~) (KindOf (Apply ((:<=>$$) l) arg)) (KindOf ((:<=>$$$) l arg)) =>
        (:<=>$$###)
    type instance Apply ((:<=>$$) l) l = (:<=>$$$) l l
    instance SuppressUnusedWarnings (:<=>$) where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) (:<=>$###) GHC.Tuple.())
    data (:<=>$) (l :: TyFun a (TyFun a Ordering -> *))
      = forall arg. (GHC.Types.~) (KindOf (Apply (:<=>$) arg)) (KindOf ((:<=>$$) arg)) =>
        (:<=>$###)
    type instance Apply (:<=>$) l = (:<=>$$) l
    class (GHC.Types.~) kproxy KProxy => PMyOrd (kproxy :: KProxy a) where
      type family Mycompare (arg :: a) (arg :: a) :: Ordering
      type family (:<=>) (arg :: a) (arg :: a) :: Ordering
      type instance (:<=>) (a_0123456789 :: a) (a_0123456789 :: a) = (Apply (Apply MycompareSym0 a_0123456789) a_0123456789 :: Ordering)
    instance PMyOrd (KProxy :: KProxy Nat) where
      type Mycompare (Zero :: Nat) (Zero :: Nat) = (EQSym0 :: Ordering)
      type Mycompare (Zero :: Nat) (Succ z :: Nat) = (LTSym0 :: Ordering)
      type Mycompare (Succ z :: Nat) (Zero :: Nat) = (GTSym0 :: Ordering)
      type Mycompare (Succ n :: Nat) (Succ m :: Nat) = (Apply (Apply MycompareSym0 m) n :: Ordering)
    instance PMyOrd (KProxy :: KProxy GHC.Tuple.()) where
      type Mycompare (z :: GHC.Tuple.()) (a_0123456789 :: GHC.Tuple.()) = (Apply (Apply ConstSym0 EQSym0) a_0123456789 :: Ordering)
    instance PMyOrd (KProxy :: KProxy Foo) where
      type Mycompare (a_0123456789 :: Foo) (a_0123456789 :: Foo) = (Apply (Apply FooCompareSym0 a_0123456789) a_0123456789 :: Ordering)
    type ASym0 = A
    type BSym0 = B
Promote/Classes.hs:0:0: Splicing declarations
    promote
      [d| data Nat' = Zero' | Succ' Nat'
          
          instance MyOrd Nat' where
            Zero' `mycompare` Zero' = EQ
            Zero' `mycompare` (Succ' _) = LT
            (Succ' _) `mycompare` Zero' = GT
            (Succ' n) `mycompare` (Succ' m) = m `mycompare` n |]
  ======>
    Promote/Classes.hs:(0,0)-(0,0)
    data Nat' = Zero' | Succ' Nat'
    instance MyOrd Nat' where
      mycompare Zero' Zero' = EQ
      mycompare Zero' (Succ' _) = LT
      mycompare (Succ' _) Zero' = GT
      mycompare (Succ' n) (Succ' m) = (m `mycompare` n)
    instance PMyOrd (KProxy :: KProxy Nat') where
      type Mycompare (Zero' :: Nat') (Zero' :: Nat') = (EQSym0 :: Ordering)
      type Mycompare (Zero' :: Nat') (Succ' z :: Nat') = (LTSym0 :: Ordering)
      type Mycompare (Succ' z :: Nat') (Zero' :: Nat') = (GTSym0 :: Ordering)
      type Mycompare (Succ' n :: Nat') (Succ' m :: Nat') = (Apply (Apply MycompareSym0 m) n :: Ordering)
    type Zero'Sym0 = Zero'
    type Succ'Sym1 (t :: Nat') = Succ' t
    instance SuppressUnusedWarnings Succ'Sym0 where
      suppressUnusedWarnings _
        = snd (GHC.Tuple.(,) Succ'Sym0KindInference GHC.Tuple.())
    data Succ'Sym0 (l :: TyFun Nat' Nat')
      = forall arg. (GHC.Types.~) (KindOf (Apply Succ'Sym0 arg)) (KindOf (Succ'Sym1 arg)) =>
        Succ'Sym0KindInference
    type instance Apply Succ'Sym0 l = Succ'Sym1 l