Created
August 1, 2019 07:13
-
-
Save phadej/2e0680ef9e1005fda8b1d401111f36ac to your computer and use it in GitHub Desktop.
Look what I have down. Compare normalFoo and exposeFoo (and inlinableFoo)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# OPTIONS_GHC -funfolding-creation-threshold=2 #-} | |
module Inline (inlineFoo, inlinableFoo, exposeFoo, normalFoo) where | |
import System.IO.Unsafe (unsafePerformIO) | |
{- | |
data IfaceUnfolding | |
= IfCoreUnfold Bool IfaceExpr -- True <=> INLINABLE, False <=> regular unfolding | |
-- Possibly could eliminate the Bool here, the information | |
-- is also in the InlinePragma. | |
| IfCompulsory IfaceExpr -- Only used for default methods, in fact | |
| IfInlineRule Arity -- INLINE pragmas | |
Bool -- OK to inline even if *un*-saturated | |
Bool -- OK to inline even if context is boring | |
IfaceExpr | |
| IfDFunUnfold [IfaceBndr] [IfaceExpr] | |
-} | |
-- ghc -c -Wall Inline.hs -ddump-hi -ddump-hi-diffs -fforce-recomp -O -ddump-simpl | |
data Foo a = Foo a a | |
plus :: Num a => Foo a -> Foo a -> Foo a | |
plus (Foo u x) (Foo v y) = Foo (u + v) (x + y) | |
inlineFoo :: Num a => Foo a -> Foo a -> Foo a | |
inlineFoo x y = plus x y | |
{-# INLINE inlineFoo #-} | |
inlinableFoo :: Num a => Foo a -> Foo a -> Foo a | |
inlinableFoo x y = plus x y | |
{-# INLINABLE inlinableFoo #-} | |
exposeFoo :: Num a => Foo a -> Foo a -> Foo a | |
exposeFoo x y = plus (plus (plus x y) (plus x y)) (plus (plus x y) (plus x y)) | |
{-# EXPOSE exposeFoo #-} | |
normalFoo :: Num a => Foo a -> Foo a -> Foo a | |
normalFoo x y = plus (plus (plus y x) (plus x y)) (plus (plus x y) (plus x y)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
==================== FINAL INTERFACE ==================== | |
interface main:Inline 808020190723 | |
interface hash: 9f0f2cff216a5fb4bfeda2dda2f3c060 | |
ABI hash: fdfa93f448250291a525cf6477072c64 | |
export-list hash: a80cd0e3c2c42239f011798a97113648 | |
orphan hash: 693e9af84d3dfcc71e640e005bdc5e2e | |
flag hash: eb42850e3475040cf16f9870b09ef313 | |
opt_hash: 38f3f0d46aaf5d285b4b79cdc5c15af5 | |
hpc_hash: 93b885adfe0da089cdf634904fd59f71 | |
plugin_hash: ad164012d6b1e14942349d58b1132007 | |
sig of: Nothing | |
used TH splices: False | |
where | |
exports: | |
Inline.exposeFoo | |
Inline.inlinableFoo | |
Inline.inlineFoo | |
Inline.normalFoo | |
module dependencies: | |
package dependencies: base-4.13.0.0 ghc-prim-0.5.3 | |
integer-gmp-1.0.2.0 | |
orphans: base-4.13.0.0:GHC.Float base-4.13.0.0:GHC.Base | |
family instance modules: base-4.13.0.0:Control.Applicative | |
base-4.13.0.0:Data.Functor.Const | |
base-4.13.0.0:Data.Functor.Identity base-4.13.0.0:Data.Monoid | |
base-4.13.0.0:Data.Semigroup.Internal base-4.13.0.0:GHC.Generics | |
base-4.13.0.0:GHC.IO.Exception | |
import -/ base-4.13.0.0:GHC.Num 886b53b0c06d95db9bfdb7ddba6c7bb0 | |
import -/ base-4.13.0.0:Prelude c7b71d154b256714e240fc6f62ee962e | |
import -/ base-4.13.0.0:System.IO.Unsafe 4b5d02d0b36b59763d7a0b0f4be9e272 | |
e05fd708aa162b82f84d9eac3587c370 | |
$tc'Foo :: GHC.Types.TyCon | |
{- HasNoCafRefs, Strictness: m, | |
Unfolding: (GHC.Types.TyCon | |
15544478429845824780## | |
6938139519567767639## | |
Inline.$trModule | |
Inline.$tc'Foo2 | |
1# | |
Inline.$tc'Foo1) -} | |
631a3b389a34f30d822cd51c2f075ce8 | |
$tc'Foo1 :: GHC.Types.KindRep | |
{- HasNoCafRefs, Strictness: m4, Inline: [~] -} | |
6bb949791994ec60c61e16e11753b16b | |
$tc'Foo2 :: GHC.Types.TrName | |
{- HasNoCafRefs, Strictness: m1, | |
Unfolding: (GHC.Types.TrNameS Inline.$tc'Foo3) -} | |
71493233982ec1672c4512831cd22e15 | |
$tc'Foo3 :: GHC.Prim.Addr# | |
{- HasNoCafRefs, Unfolding: ("'Foo"#) -} | |
ce51fe9e64ecc3e2fff9781e46dd627e | |
$tcFoo :: GHC.Types.TyCon | |
{- HasNoCafRefs, Strictness: m, | |
Unfolding: (GHC.Types.TyCon | |
13023494399417359199## | |
18085582302605504116## | |
Inline.$trModule | |
Inline.$tcFoo1 | |
0# | |
GHC.Types.krep$*Arr*) -} | |
4b4aa867ad880fe2e0c5bbf8b5541ca2 | |
$tcFoo1 :: GHC.Types.TrName | |
{- HasNoCafRefs, Strictness: m1, | |
Unfolding: (GHC.Types.TrNameS Inline.$tcFoo2) -} | |
56afc8c26d78a2de705f4e78fb48af3f | |
$tcFoo2 :: GHC.Prim.Addr# | |
{- HasNoCafRefs, Unfolding: ("Foo"#) -} | |
2046f188992bb184f93fbe31e0a136ff | |
$trModule :: GHC.Types.Module | |
{- HasNoCafRefs, Strictness: m, | |
Unfolding: (GHC.Types.Module | |
Inline.$trModule3 | |
Inline.$trModule1) -} | |
d8059ad99b795d05f64657ef0b607140 | |
$trModule1 :: GHC.Types.TrName | |
{- HasNoCafRefs, Strictness: m1, | |
Unfolding: (GHC.Types.TrNameS Inline.$trModule2) -} | |
8f1a7dafd7a95e5177881dd4c36f160b | |
$trModule2 :: GHC.Prim.Addr# | |
{- HasNoCafRefs, Unfolding: ("Inline"#) -} | |
f7b9bea5b70a5ed56376203a589ddd3d | |
$trModule3 :: GHC.Types.TrName | |
{- HasNoCafRefs, Strictness: m1, | |
Unfolding: (GHC.Types.TrNameS Inline.$trModule4) -} | |
bfd2d9db6c7052701e4ebf9081fa56c7 | |
$trModule4 :: GHC.Prim.Addr# | |
{- HasNoCafRefs, Unfolding: ("main"#) -} | |
bac29101f5261e4e8b70610ee41d0bfa | |
$wexposeFoo :: GHC.Num.Num a => a -> a -> a -> a -> (# a, a #) | |
{- Arity: 5, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><L,U><L,U><L,U><L,U>, | |
Inline: [2], | |
Unfolding: (\ @ a | |
(w :: GHC.Num.Num a) | |
(ww :: a) | |
(ww1 :: a) | |
(ww2 :: a) | |
(ww3 :: a) -> | |
case Inline.$wplus @ a w ww ww1 ww2 ww3 of ww4 { (#,#) ww5 ww6 -> | |
case Inline.$wplus @ a w ww5 ww6 ww5 ww6 of ww7 { (#,#) ww8 ww9 -> | |
case Inline.$wplus | |
@ a | |
w | |
ww5 | |
ww6 | |
ww5 | |
ww6 of ww10 { (#,#) ww11 ww12 -> | |
Inline.$wplus @ a w ww8 ww9 ww11 ww12 } } }) -} | |
89bdb8af8d6db50df831c5aa17376158 | |
$wnormalFoo :: GHC.Num.Num a => a -> a -> a -> a -> (# a, a #) | |
{- Arity: 5, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><L,U><L,U><L,U><L,U>, | |
Inline: [2] -} | |
68d86dce65b522504e050670b71cde9a | |
$wplus :: GHC.Num.Num a => a -> a -> a -> a -> (# a, a #) | |
{- Arity: 5, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><L,U><L,U><L,U><L,U>, | |
Inline: [2] -} | |
0e1a5771f4441bc98db78adb90c70b8d | |
data Foo a = Foo a a | |
74f0e267ca8731798053ec0860cc378c | |
exposeFoo :: | |
GHC.Num.Num a => Inline.Foo a -> Inline.Foo a -> Inline.Foo a | |
{- Arity: 3, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Inline: [2], | |
Unfolding: InlineRule (3, True, False) | |
(\ @ a | |
(w :: GHC.Num.Num a) | |
(w1 :: Inline.Foo a) | |
(w2 :: Inline.Foo a) -> | |
case w1 of ww { Inline.Foo ww1 ww2 -> | |
case w2 of ww3 { Inline.Foo ww4 ww5 -> | |
case Inline.$wexposeFoo | |
@ a | |
w | |
ww1 | |
ww2 | |
ww4 | |
ww5 of ww6 { (#,#) ww7 ww8 -> | |
Inline.Foo @ a ww7 ww8 } } }) -} | |
b13831f9c865fb6118db28be6064fea4 | |
inlinableFoo :: | |
GHC.Num.Num a => Inline.Foo a -> Inline.Foo a -> Inline.Foo a | |
{- Arity: 3, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Inline:, Unfolding: InlineRule (0, True, True) Inline.plus -} | |
edd966ac0d804064080eb25aa5a6283b | |
inlineFoo :: | |
GHC.Num.Num a => Inline.Foo a -> Inline.Foo a -> Inline.Foo a | |
{- Arity: 3, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Inline: (sat-args=2), | |
Unfolding: InlineRule (3, False, True) Inline.plus -} | |
a3d3703ab991c1aa69bcc539aaeb45a8 | |
normalFoo :: | |
GHC.Num.Num a => Inline.Foo a -> Inline.Foo a -> Inline.Foo a | |
{- Arity: 3, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Inline: [2], | |
Unfolding: InlineRule (3, True, False) | |
(\ @ a | |
(w :: GHC.Num.Num a) | |
(w1 :: Inline.Foo a) | |
(w2 :: Inline.Foo a) -> | |
case w1 of ww { Inline.Foo ww1 ww2 -> | |
case w2 of ww3 { Inline.Foo ww4 ww5 -> | |
case Inline.$wnormalFoo | |
@ a | |
w | |
ww1 | |
ww2 | |
ww4 | |
ww5 of ww6 { (#,#) ww7 ww8 -> | |
Inline.Foo @ a ww7 ww8 } } }) -} | |
16ac205e26968606075b1b5ecbcdb29b | |
plus :: | |
GHC.Num.Num a => Inline.Foo a -> Inline.Foo a -> Inline.Foo a | |
{- Arity: 3, HasNoCafRefs, | |
Strictness: <L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Inline: [2], | |
Unfolding: InlineRule (3, True, False) | |
(\ @ a | |
(w :: GHC.Num.Num a) | |
(w1 :: Inline.Foo a) | |
(w2 :: Inline.Foo a) -> | |
case w1 of ww { Inline.Foo ww1 ww2 -> | |
case w2 of ww3 { Inline.Foo ww4 ww5 -> | |
case Inline.$wplus @ a w ww1 ww2 ww4 ww5 of ww6 { (#,#) ww7 ww8 -> | |
Inline.Foo @ a ww7 ww8 } } }) -} | |
trusted: none | |
require own pkg trusted: False | |
module header: | |
Nothing | |
declaration docs: | |
arg docs: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
==================== Tidy Core ==================== | |
Result size of Tidy Core | |
= {terms: 227, types: 271, coercions: 0, joins: 0/0} | |
-- RHS size: {terms: 15, types: 14, coercions: 0, joins: 0/0} | |
Inline.$wplus [InlPrag=NOUSERINLINE[2]] | |
:: forall a. Num a => a -> a -> a -> a -> (# a, a #) | |
[GblId, | |
Arity=5, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><L,U><L,U><L,U><L,U>, | |
Unf=OtherCon []] | |
Inline.$wplus | |
= \ (@ a_s1hz) | |
(w_s1hA :: Num a_s1hz) | |
(ww_s1hF :: a_s1hz) | |
(ww1_s1hG :: a_s1hz) | |
(ww2_s1hK :: a_s1hz) | |
(ww3_s1hL :: a_s1hz) -> | |
(# + @ a_s1hz w_s1hA ww_s1hF ww2_s1hK, | |
+ @ a_s1hz w_s1hA ww1_s1hG ww3_s1hL #) | |
-- RHS size: {terms: 21, types: 25, coercions: 0, joins: 0/0} | |
plus [InlPrag=NOUSERINLINE[2]] | |
:: forall a. Num a => Foo a -> Foo a -> Foo a | |
[GblId, | |
Arity=3, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, | |
Guidance=ALWAYS_IF(arity=3,unsat_ok=True,boring_ok=False) | |
Tmpl= \ (@ a_s1hz) | |
(w_s1hA [Occ=Once] :: Num a_s1hz) | |
(w1_s1hB [Occ=Once!] :: Foo a_s1hz) | |
(w2_s1hC [Occ=Once!] :: Foo a_s1hz) -> | |
case w1_s1hB of { Foo ww1_s1hF [Occ=Once] ww2_s1hG [Occ=Once] -> | |
case w2_s1hC of { Foo ww4_s1hK [Occ=Once] ww5_s1hL [Occ=Once] -> | |
case Inline.$wplus | |
@ a_s1hz w_s1hA ww1_s1hF ww2_s1hG ww4_s1hK ww5_s1hL | |
of | |
{ (# ww7_s1ir [Occ=Once], ww8_s1is [Occ=Once] #) -> | |
Inline.Foo @ a_s1hz ww7_s1ir ww8_s1is | |
} | |
} | |
}}] | |
plus | |
= \ (@ a_s1hz) | |
(w_s1hA :: Num a_s1hz) | |
(w1_s1hB :: Foo a_s1hz) | |
(w2_s1hC :: Foo a_s1hz) -> | |
case w1_s1hB of { Foo ww1_s1hF ww2_s1hG -> | |
case w2_s1hC of { Foo ww4_s1hK ww5_s1hL -> | |
case Inline.$wplus | |
@ a_s1hz w_s1hA ww1_s1hF ww2_s1hG ww4_s1hK ww5_s1hL | |
of | |
{ (# ww7_s1ir, ww8_s1is #) -> | |
Inline.Foo @ a_s1hz ww7_s1ir ww8_s1is | |
} | |
} | |
} | |
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} | |
inlineFoo [InlPrag=INLINE (sat-args=2)] | |
:: forall a. Num a => Foo a -> Foo a -> Foo a | |
[GblId, | |
Arity=3, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, | |
Guidance=ALWAYS_IF(arity=3,unsat_ok=False,boring_ok=True) | |
Tmpl= plus}] | |
inlineFoo = plus | |
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} | |
inlinableFoo [InlPrag=INLINABLE] | |
:: forall a. Num a => Foo a -> Foo a -> Foo a | |
[GblId, | |
Arity=3, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, | |
Guidance=ALWAYS_IF(arity=0,unsat_ok=True,boring_ok=True) | |
Tmpl= plus}] | |
inlinableFoo = plus | |
-- RHS size: {terms: 36, types: 33, coercions: 0, joins: 0/0} | |
Inline.$wexposeFoo [InlPrag=EXPOSE[2]] | |
:: forall a. Num a => a -> a -> a -> a -> (# a, a #) | |
[GblId, | |
Arity=5, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><L,U><L,U><L,U><L,U>, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=NEVER}] | |
Inline.$wexposeFoo | |
= \ (@ a_s1hR) | |
(w_s1hS :: Num a_s1hR) | |
(ww_s1hX :: a_s1hR) | |
(ww1_s1hY :: a_s1hR) | |
(ww2_s1i2 :: a_s1hR) | |
(ww3_s1i3 :: a_s1hR) -> | |
case Inline.$wplus | |
@ a_s1hR w_s1hS ww_s1hX ww1_s1hY ww2_s1i2 ww3_s1i3 | |
of | |
{ (# ww5_s1ir, ww6_s1is #) -> | |
case Inline.$wplus | |
@ a_s1hR w_s1hS ww5_s1ir ww6_s1is ww5_s1ir ww6_s1is | |
of | |
{ (# ww8_X1jt, ww9_X1jv #) -> | |
case Inline.$wplus | |
@ a_s1hR w_s1hS ww5_s1ir ww6_s1is ww5_s1ir ww6_s1is | |
of | |
{ (# ww11_X1jW, ww12_X1jY #) -> | |
Inline.$wplus @ a_s1hR w_s1hS ww8_X1jt ww9_X1jv ww11_X1jW ww12_X1jY | |
} | |
} | |
} | |
-- RHS size: {terms: 21, types: 25, coercions: 0, joins: 0/0} | |
exposeFoo [InlPrag=NOUSERINLINE[2]] | |
:: forall a. Num a => Foo a -> Foo a -> Foo a | |
[GblId, | |
Arity=3, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, | |
Guidance=ALWAYS_IF(arity=3,unsat_ok=True,boring_ok=False) | |
Tmpl= \ (@ a_s1hR) | |
(w_s1hS [Occ=Once] :: Num a_s1hR) | |
(w1_s1hT [Occ=Once!] :: Foo a_s1hR) | |
(w2_s1hU [Occ=Once!] :: Foo a_s1hR) -> | |
case w1_s1hT of { Foo ww1_s1hX [Occ=Once] ww2_s1hY [Occ=Once] -> | |
case w2_s1hU of { Foo ww4_s1i2 [Occ=Once] ww5_s1i3 [Occ=Once] -> | |
case Inline.$wexposeFoo | |
@ a_s1hR w_s1hS ww1_s1hX ww2_s1hY ww4_s1i2 ww5_s1i3 | |
of | |
{ (# ww7_s1iu [Occ=Once], ww8_s1iv [Occ=Once] #) -> | |
Inline.Foo @ a_s1hR ww7_s1iu ww8_s1iv | |
} | |
} | |
}}] | |
exposeFoo | |
= \ (@ a_s1hR) | |
(w_s1hS :: Num a_s1hR) | |
(w1_s1hT :: Foo a_s1hR) | |
(w2_s1hU :: Foo a_s1hR) -> | |
case w1_s1hT of { Foo ww1_s1hX ww2_s1hY -> | |
case w2_s1hU of { Foo ww4_s1i2 ww5_s1i3 -> | |
case Inline.$wexposeFoo | |
@ a_s1hR w_s1hS ww1_s1hX ww2_s1hY ww4_s1i2 ww5_s1i3 | |
of | |
{ (# ww7_s1iu, ww8_s1iv #) -> | |
Inline.Foo @ a_s1hR ww7_s1iu ww8_s1iv | |
} | |
} | |
} | |
-- RHS size: {terms: 44, types: 41, coercions: 0, joins: 0/0} | |
Inline.$wnormalFoo [InlPrag=NOUSERINLINE[2]] | |
:: forall a. Num a => a -> a -> a -> a -> (# a, a #) | |
[GblId, | |
Arity=5, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><L,U><L,U><L,U><L,U>, | |
Unf=OtherCon []] | |
Inline.$wnormalFoo | |
= \ (@ a_s1i9) | |
(w_s1ia :: Num a_s1i9) | |
(ww_s1if :: a_s1i9) | |
(ww1_s1ig :: a_s1i9) | |
(ww2_s1ik :: a_s1i9) | |
(ww3_s1il :: a_s1i9) -> | |
case Inline.$wplus | |
@ a_s1i9 w_s1ia ww2_s1ik ww3_s1il ww_s1if ww1_s1ig | |
of | |
{ (# ww5_s1ir, ww6_s1is #) -> | |
case Inline.$wplus | |
@ a_s1i9 w_s1ia ww_s1if ww1_s1ig ww2_s1ik ww3_s1il | |
of | |
{ (# ww8_X1jo, ww9_X1jq #) -> | |
case Inline.$wplus | |
@ a_s1i9 w_s1ia ww5_s1ir ww6_s1is ww8_X1jo ww9_X1jq | |
of | |
{ (# ww11_X1jv, ww12_X1jx #) -> | |
case Inline.$wplus | |
@ a_s1i9 w_s1ia ww8_X1jo ww9_X1jq ww8_X1jo ww9_X1jq | |
of | |
{ (# ww14_X1jY, ww15_X1k0 #) -> | |
Inline.$wplus | |
@ a_s1i9 w_s1ia ww11_X1jv ww12_X1jx ww14_X1jY ww15_X1k0 | |
} | |
} | |
} | |
} | |
-- RHS size: {terms: 21, types: 25, coercions: 0, joins: 0/0} | |
normalFoo [InlPrag=NOUSERINLINE[2]] | |
:: forall a. Num a => Foo a -> Foo a -> Foo a | |
[GblId, | |
Arity=3, | |
Caf=NoCafRefs, | |
Str=<L,U(C(C1(U)),A,A,A,A,A,A)><S,1*U(U,U)><S,1*U(U,U)>m, | |
Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, | |
Guidance=ALWAYS_IF(arity=3,unsat_ok=True,boring_ok=False) | |
Tmpl= \ (@ a_s1i9) | |
(w_s1ia [Occ=Once] :: Num a_s1i9) | |
(w1_s1ib [Occ=Once!] :: Foo a_s1i9) | |
(w2_s1ic [Occ=Once!] :: Foo a_s1i9) -> | |
case w1_s1ib of { Foo ww1_s1if [Occ=Once] ww2_s1ig [Occ=Once] -> | |
case w2_s1ic of { Foo ww4_s1ik [Occ=Once] ww5_s1il [Occ=Once] -> | |
case Inline.$wnormalFoo | |
@ a_s1i9 w_s1ia ww1_s1if ww2_s1ig ww4_s1ik ww5_s1il | |
of | |
{ (# ww7_s1ix [Occ=Once], ww8_s1iy [Occ=Once] #) -> | |
Inline.Foo @ a_s1i9 ww7_s1ix ww8_s1iy | |
} | |
} | |
}}] | |
normalFoo | |
= \ (@ a_s1i9) | |
(w_s1ia :: Num a_s1i9) | |
(w1_s1ib :: Foo a_s1i9) | |
(w2_s1ic :: Foo a_s1i9) -> | |
case w1_s1ib of { Foo ww1_s1if ww2_s1ig -> | |
case w2_s1ic of { Foo ww4_s1ik ww5_s1il -> | |
case Inline.$wnormalFoo | |
@ a_s1i9 w_s1ia ww1_s1if ww2_s1ig ww4_s1ik ww5_s1il | |
of | |
{ (# ww7_s1ix, ww8_s1iy #) -> | |
Inline.Foo @ a_s1i9 ww7_s1ix ww8_s1iy | |
} | |
} | |
} | |
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} | |
Inline.$trModule4 :: GHC.Prim.Addr# | |
[GblId, | |
Caf=NoCafRefs, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 20 0}] | |
Inline.$trModule4 = "main"# | |
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} | |
Inline.$trModule3 :: GHC.Types.TrName | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m1, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] | |
Inline.$trModule3 = GHC.Types.TrNameS Inline.$trModule4 | |
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} | |
Inline.$trModule2 :: GHC.Prim.Addr# | |
[GblId, | |
Caf=NoCafRefs, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 30 0}] | |
Inline.$trModule2 = "Inline"# | |
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} | |
Inline.$trModule1 :: GHC.Types.TrName | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m1, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] | |
Inline.$trModule1 = GHC.Types.TrNameS Inline.$trModule2 | |
-- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0} | |
Inline.$trModule :: GHC.Types.Module | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}] | |
Inline.$trModule | |
= GHC.Types.Module Inline.$trModule3 Inline.$trModule1 | |
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} | |
$krep_r1gx :: GHC.Types.KindRep | |
[GblId, Caf=NoCafRefs, Str=m2, Unf=OtherCon []] | |
$krep_r1gx = GHC.Types.KindRepVar 0# | |
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tcFoo2 :: GHC.Prim.Addr# | |
[GblId, | |
Caf=NoCafRefs, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 20 0}] | |
Inline.$tcFoo2 = "Foo"# | |
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tcFoo1 :: GHC.Types.TrName | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m1, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] | |
Inline.$tcFoo1 = GHC.Types.TrNameS Inline.$tcFoo2 | |
-- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tcFoo :: GHC.Types.TyCon | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 70}] | |
Inline.$tcFoo | |
= GHC.Types.TyCon | |
13023494399417359199## | |
18085582302605504116## | |
Inline.$trModule | |
Inline.$tcFoo1 | |
0# | |
GHC.Types.krep$*Arr* | |
-- RHS size: {terms: 3, types: 2, coercions: 0, joins: 0/0} | |
$krep1_r1l0 :: [GHC.Types.KindRep] | |
[GblId, Caf=NoCafRefs, Str=m2, Unf=OtherCon []] | |
$krep1_r1l0 | |
= GHC.Types.: | |
@ GHC.Types.KindRep $krep_r1gx (GHC.Types.[] @ GHC.Types.KindRep) | |
-- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0} | |
$krep2_r1l1 :: GHC.Types.KindRep | |
[GblId, Caf=NoCafRefs, Str=m1, Unf=OtherCon []] | |
$krep2_r1l1 = GHC.Types.KindRepTyConApp Inline.$tcFoo $krep1_r1l0 | |
-- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0} | |
$krep3_r1l2 :: GHC.Types.KindRep | |
[GblId, Caf=NoCafRefs, Str=m4, Unf=OtherCon []] | |
$krep3_r1l2 = GHC.Types.KindRepFun $krep_r1gx $krep2_r1l1 | |
-- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tc'Foo1 [InlPrag=NOUSERINLINE[~]] :: GHC.Types.KindRep | |
[GblId, Caf=NoCafRefs, Str=m4, Unf=OtherCon []] | |
Inline.$tc'Foo1 = GHC.Types.KindRepFun $krep_r1gx $krep3_r1l2 | |
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tc'Foo3 :: GHC.Prim.Addr# | |
[GblId, | |
Caf=NoCafRefs, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 20 0}] | |
Inline.$tc'Foo3 = "'Foo"# | |
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tc'Foo2 :: GHC.Types.TrName | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m1, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] | |
Inline.$tc'Foo2 = GHC.Types.TrNameS Inline.$tc'Foo3 | |
-- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0} | |
Inline.$tc'Foo :: GHC.Types.TyCon | |
[GblId, | |
Caf=NoCafRefs, | |
Str=m, | |
Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, | |
WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 70}] | |
Inline.$tc'Foo | |
= GHC.Types.TyCon | |
15544478429845824780## | |
6938139519567767639## | |
Inline.$trModule | |
Inline.$tc'Foo2 | |
1# | |
Inline.$tc'Foo1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment