packages feed

singletons-2.3: tests/compile-and-dump/Singletons/T178.ghc82.template

Singletons/T178.hs:(0,0)-(0,0): Splicing declarations
    singletons
      [d| empty :: U
          empty = []
          
          data Occ
            = Str | Opt | Many
            deriving (Eq, Ord, Show)
          type U = [(Symbol, Occ)] |]
  ======>
    data Occ
      = Str | Opt | Many
      deriving (Eq, Ord, Show)
    type U = [(Symbol, Occ)]
    empty :: U
    empty = []
    type family Equals_0123456789876543210 (a :: Occ) (b :: Occ) :: Bool where
      Equals_0123456789876543210 Str Str = TrueSym0
      Equals_0123456789876543210 Opt Opt = TrueSym0
      Equals_0123456789876543210 Many Many = TrueSym0
      Equals_0123456789876543210 (a :: Occ) (b :: Occ) = FalseSym0
    instance PEq Occ where
      type (:==) (a :: Occ) (b :: Occ) = Equals_0123456789876543210 a b
    type StrSym0 = Str
    type OptSym0 = Opt
    type ManySym0 = Many
    type EmptySym0 = Empty
    type family Empty :: [(Symbol, Occ)] where
      = '[]
    type family Compare_0123456789876543210 (a :: Occ) (a :: Occ) :: Ordering where
      Compare_0123456789876543210 Str Str = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]
      Compare_0123456789876543210 Opt Opt = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]
      Compare_0123456789876543210 Many Many = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]
      Compare_0123456789876543210 Str Opt = LTSym0
      Compare_0123456789876543210 Str Many = LTSym0
      Compare_0123456789876543210 Opt Str = GTSym0
      Compare_0123456789876543210 Opt Many = LTSym0
      Compare_0123456789876543210 Many Str = GTSym0
      Compare_0123456789876543210 Many Opt = GTSym0
    type Compare_0123456789876543210Sym2 (t :: Occ) (t :: Occ) =
        Compare_0123456789876543210 t t
    instance SuppressUnusedWarnings Compare_0123456789876543210Sym1 where
      suppressUnusedWarnings _
        = snd
            ((GHC.Tuple.(,) Compare_0123456789876543210Sym1KindInference)
               GHC.Tuple.())
    data Compare_0123456789876543210Sym1 (l :: Occ) (l :: TyFun Occ Ordering)
      = forall arg. SameKind (Apply (Compare_0123456789876543210Sym1 l) arg) (Compare_0123456789876543210Sym2 l arg) =>
        Compare_0123456789876543210Sym1KindInference
    type instance Apply (Compare_0123456789876543210Sym1 l) l = Compare_0123456789876543210 l l
    instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where
      suppressUnusedWarnings _
        = snd
            ((GHC.Tuple.(,) Compare_0123456789876543210Sym0KindInference)
               GHC.Tuple.())
    data Compare_0123456789876543210Sym0 (l :: TyFun Occ (TyFun Occ Ordering
                                                          -> GHC.Types.Type))
      = forall arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>
        Compare_0123456789876543210Sym0KindInference
    type instance Apply Compare_0123456789876543210Sym0 l = Compare_0123456789876543210Sym1 l
    instance POrd Occ where
      type Compare (a :: Occ) (a :: Occ) = Apply (Apply Compare_0123456789876543210Sym0 a) a
    sEmpty :: Sing (EmptySym0 :: [(Symbol, Occ)])
    sEmpty = SNil
    data instance Sing (z :: Occ)
      = z ~ Str => SStr | z ~ Opt => SOpt | z ~ Many => SMany
    type SOcc = (Sing :: Occ -> GHC.Types.Type)
    instance SingKind Occ where
      type Demote Occ = Occ
      fromSing SStr = Str
      fromSing SOpt = Opt
      fromSing SMany = Many
      toSing Str = SomeSing SStr
      toSing Opt = SomeSing SOpt
      toSing Many = SomeSing SMany
    instance SEq Occ where
      (%:==) SStr SStr = STrue
      (%:==) SStr SOpt = SFalse
      (%:==) SStr SMany = SFalse
      (%:==) SOpt SStr = SFalse
      (%:==) SOpt SOpt = STrue
      (%:==) SOpt SMany = SFalse
      (%:==) SMany SStr = SFalse
      (%:==) SMany SOpt = SFalse
      (%:==) SMany SMany = STrue
    instance SDecide Occ where
      (%~) SStr SStr = Proved Refl
      (%~) SStr SOpt
        = Disproved
            (\ x
               -> case x of {
                    _ -> error "Empty case reached -- this should be impossible" })
      (%~) SStr SMany
        = Disproved
            (\ x
               -> case x of {
                    _ -> error "Empty case reached -- this should be impossible" })
      (%~) SOpt SStr
        = Disproved
            (\ x
               -> case x of {
                    _ -> error "Empty case reached -- this should be impossible" })
      (%~) SOpt SOpt = Proved Refl
      (%~) SOpt SMany
        = Disproved
            (\ x
               -> case x of {
                    _ -> error "Empty case reached -- this should be impossible" })
      (%~) SMany SStr
        = Disproved
            (\ x
               -> case x of {
                    _ -> error "Empty case reached -- this should be impossible" })
      (%~) SMany SOpt
        = Disproved
            (\ x
               -> case x of {
                    _ -> error "Empty case reached -- this should be impossible" })
      (%~) SMany SMany = Proved Refl
    instance SOrd Occ where
      sCompare ::
        forall (t1 :: Occ) (t2 :: Occ).
        Sing t1
        -> Sing t2
           -> Sing (Apply (Apply (CompareSym0 :: TyFun Occ (TyFun Occ Ordering
                                                            -> GHC.Types.Type)
                                                 -> GHC.Types.Type) t1 :: TyFun Occ Ordering
                                                                          -> GHC.Types.Type) t2 :: Ordering)
      sCompare SStr SStr
        = (applySing
             ((applySing
                 ((applySing ((singFun3 @FoldlSym0) sFoldl))
                    ((singFun2 @ThenCmpSym0) sThenCmp)))
                SEQ))
            SNil
      sCompare SOpt SOpt
        = (applySing
             ((applySing
                 ((applySing ((singFun3 @FoldlSym0) sFoldl))
                    ((singFun2 @ThenCmpSym0) sThenCmp)))
                SEQ))
            SNil
      sCompare SMany SMany
        = (applySing
             ((applySing
                 ((applySing ((singFun3 @FoldlSym0) sFoldl))
                    ((singFun2 @ThenCmpSym0) sThenCmp)))
                SEQ))
            SNil
      sCompare SStr SOpt = SLT
      sCompare SStr SMany = SLT
      sCompare SOpt SStr = SGT
      sCompare SOpt SMany = SLT
      sCompare SMany SStr = SGT
      sCompare SMany SOpt = SGT
    instance SingI Str where
      sing = SStr
    instance SingI Opt where
      sing = SOpt
    instance SingI Many where
      sing = SMany