singletons-2.3: tests/compile-and-dump/Singletons/T29.ghc82.template
Singletons/T29.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| foo :: Bool -> Bool
foo x = not $ x
bar :: Bool -> Bool
bar x = not . not . not $ x
baz :: Bool -> Bool
baz x = not $! x
ban :: Bool -> Bool
ban x = not . not . not $! x |]
======>
foo :: Bool -> Bool
foo x = (not $ x)
bar :: Bool -> Bool
bar x = ((not . (not . not)) $ x)
baz :: Bool -> Bool
baz x = (not $! x)
ban :: Bool -> Bool
ban x = ((not . (not . not)) $! x)
type BanSym1 (t :: Bool) = Ban t
instance SuppressUnusedWarnings BanSym0 where
suppressUnusedWarnings _
= snd ((GHC.Tuple.(,) BanSym0KindInference) GHC.Tuple.())
data BanSym0 (l :: TyFun Bool Bool)
= forall arg. SameKind (Apply BanSym0 arg) (BanSym1 arg) =>
BanSym0KindInference
type instance Apply BanSym0 l = Ban l
type BazSym1 (t :: Bool) = Baz t
instance SuppressUnusedWarnings BazSym0 where
suppressUnusedWarnings _
= snd ((GHC.Tuple.(,) BazSym0KindInference) GHC.Tuple.())
data BazSym0 (l :: TyFun Bool Bool)
= forall arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>
BazSym0KindInference
type instance Apply BazSym0 l = Baz l
type BarSym1 (t :: Bool) = Bar t
instance SuppressUnusedWarnings BarSym0 where
suppressUnusedWarnings _
= snd ((GHC.Tuple.(,) BarSym0KindInference) GHC.Tuple.())
data BarSym0 (l :: TyFun Bool Bool)
= forall arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>
BarSym0KindInference
type instance Apply BarSym0 l = Bar l
type FooSym1 (t :: Bool) = Foo t
instance SuppressUnusedWarnings FooSym0 where
suppressUnusedWarnings _
= snd ((GHC.Tuple.(,) FooSym0KindInference) GHC.Tuple.())
data FooSym0 (l :: TyFun Bool Bool)
= forall arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>
FooSym0KindInference
type instance Apply FooSym0 l = Foo l
type family Ban (a :: Bool) :: Bool where
Ban x = Apply (Apply ($!$) (Apply (Apply (:.$) NotSym0) (Apply (Apply (:.$) NotSym0) NotSym0))) x
type family Baz (a :: Bool) :: Bool where
Baz x = Apply (Apply ($!$) NotSym0) x
type family Bar (a :: Bool) :: Bool where
Bar x = Apply (Apply ($$) (Apply (Apply (:.$) NotSym0) (Apply (Apply (:.$) NotSym0) NotSym0))) x
type family Foo (a :: Bool) :: Bool where
Foo x = Apply (Apply ($$) NotSym0) x
sBan ::
forall (t :: Bool). Sing t -> Sing (Apply BanSym0 t :: Bool)
sBaz ::
forall (t :: Bool). Sing t -> Sing (Apply BazSym0 t :: Bool)
sBar ::
forall (t :: Bool). Sing t -> Sing (Apply BarSym0 t :: Bool)
sFoo ::
forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)
sBan (sX :: Sing x)
= (applySing
((applySing ((singFun2 @($!$)) (%$!)))
((applySing
((applySing ((singFun3 @(:.$)) (%:.))) ((singFun1 @NotSym0) sNot)))
((applySing
((applySing ((singFun3 @(:.$)) (%:.))) ((singFun1 @NotSym0) sNot)))
((singFun1 @NotSym0) sNot)))))
sX
sBaz (sX :: Sing x)
= (applySing
((applySing ((singFun2 @($!$)) (%$!))) ((singFun1 @NotSym0) sNot)))
sX
sBar (sX :: Sing x)
= (applySing
((applySing ((singFun2 @($$)) (%$)))
((applySing
((applySing ((singFun3 @(:.$)) (%:.))) ((singFun1 @NotSym0) sNot)))
((applySing
((applySing ((singFun3 @(:.$)) (%:.))) ((singFun1 @NotSym0) sNot)))
((singFun1 @NotSym0) sNot)))))
sX
sFoo (sX :: Sing x)
= (applySing
((applySing ((singFun2 @($$)) (%$))) ((singFun1 @NotSym0) sNot)))
sX