singletons-2.5: tests/compile-and-dump/Singletons/T29.ghc86.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 (a0123456789876543210 :: Bool) =
Ban a0123456789876543210
instance SuppressUnusedWarnings BanSym0 where
suppressUnusedWarnings = snd (((,) BanSym0KindInference) ())
data BanSym0 :: (~>) Bool Bool
where
BanSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply BanSym0 arg) (BanSym1 arg) =>
BanSym0 a0123456789876543210
type instance Apply BanSym0 a0123456789876543210 = Ban a0123456789876543210
type BazSym1 (a0123456789876543210 :: Bool) =
Baz a0123456789876543210
instance SuppressUnusedWarnings BazSym0 where
suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())
data BazSym0 :: (~>) Bool Bool
where
BazSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>
BazSym0 a0123456789876543210
type instance Apply BazSym0 a0123456789876543210 = Baz a0123456789876543210
type BarSym1 (a0123456789876543210 :: Bool) =
Bar a0123456789876543210
instance SuppressUnusedWarnings BarSym0 where
suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())
data BarSym0 :: (~>) Bool Bool
where
BarSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>
BarSym0 a0123456789876543210
type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210
type FooSym1 (a0123456789876543210 :: Bool) =
Foo a0123456789876543210
instance SuppressUnusedWarnings FooSym0 where
suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())
data FooSym0 :: (~>) Bool Bool
where
FooSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>
FooSym0 a0123456789876543210
type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210
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
instance SingI (BanSym0 :: (~>) Bool Bool) where
sing = (singFun1 @BanSym0) sBan
instance SingI (BazSym0 :: (~>) Bool Bool) where
sing = (singFun1 @BazSym0) sBaz
instance SingI (BarSym0 :: (~>) Bool Bool) where
sing = (singFun1 @BarSym0) sBar
instance SingI (FooSym0 :: (~>) Bool Bool) where
sing = (singFun1 @FooSym0) sFoo