Skip to content

Instantly share code, notes, and snippets.

@Tehnix
Created October 19, 2017 09:14
Show Gist options
  • Save Tehnix/fbf619d1e3f8966a9167229bbf15b946 to your computer and use it in GitHub Desktop.
Save Tehnix/fbf619d1e3f8966a9167229bbf15b946 to your computer and use it in GitHub Desktop.
stack ghc -- -ddump-rule-rewrites -O2 LengthTest.hs
λ .testing/Haskell stack ghc -- -ddump-rule-rewrites -O2 LengthTest.hs
[1 of 1] Compiling LengthTest ( LengthTest.hs, LengthTest.o )
Rule fired
Rule: Class op length
Before: Data.Foldable.length
TyArg []
ValArg Data.Foldable.$fFoldable[]
TyArg GHC.Integer.Type.Integer
ValArg GHC.Base.build
@ GHC.Integer.Type.Integer
(\ (@ a_d2iw)
(c_d2ix [OS=OneShot]
:: GHC.Integer.Type.Integer -> a_d2iw -> a_d2iw)
(n_d2iy [OS=OneShot] :: a_d2iw) ->
c_d2ix 1 (c_d2ix 2 (c_d2ix 3 n_d2iy)))
After: GHC.List.length
Cont: Stop[RuleArgCtxt] GHC.Types.Int
Rule fired
Rule: Class op /=
Before: GHC.Classes./=
TyArg GHC.Types.Int
ValArg GHC.Classes.$fEqInt
ValArg GHC.List.length
@ GHC.Integer.Type.Integer
(GHC.Base.build
@ GHC.Integer.Type.Integer
(\ (@ a_d2iw)
(c_d2ix [OS=OneShot]
:: GHC.Integer.Type.Integer -> a_d2iw -> a_d2iw)
(n_d2iy [OS=OneShot] :: a_d2iw) ->
c_d2ix 1 (c_d2ix 2 (c_d2ix 3 n_d2iy))))
ValArg GHC.Types.I# 0#
After: GHC.Classes.neInt
Cont: Stop[BoringCtxt] GHC.Types.Bool
Rule fired
Rule: length
Before: GHC.List.length
TyArg GHC.Integer.Type.Integer
ValArg GHC.Base.build
@ GHC.Integer.Type.Integer
(\ (@ a_d2iw)
(c_d2ix [OS=OneShot]
:: GHC.Integer.Type.Integer -> a_d2iw -> a_d2iw)
(n_d2iy [OS=OneShot] :: a_d2iw) ->
c_d2ix 1 (c_d2ix 2 (c_d2ix 3 n_d2iy)))
After: (\ (@ x_a2nt) (xs_a2nu [Occ=Once] :: [x_a2nt]) ->
GHC.Base.foldr
@ x_a2nt
@ (GHC.Types.Int -> GHC.Types.Int)
(GHC.List.lengthFB @ x_a2nt)
GHC.List.idLength
xs_a2nu
(GHC.Types.I# 0#))
@ GHC.Integer.Type.Integer
(GHC.Base.build
@ GHC.Integer.Type.Integer
(\ (@ a_d2iw)
(c_d2ix [OS=OneShot]
:: GHC.Integer.Type.Integer -> a_d2iw -> a_d2iw)
(n_d2iy [OS=OneShot] :: a_d2iw) ->
c_d2ix 1 (c_d2ix 2 (c_d2ix 3 n_d2iy))))
Cont: StrictArg GHC.Classes.neInt
ApplyToVal nodup (GHC.Types.I# 0#)
Stop[BoringCtxt] GHC.Types.Bool
Rule fired
Rule: fold/build
Before: GHC.Base.foldr
TyArg GHC.Integer.Type.Integer
TyArg GHC.Types.Int -> GHC.Types.Int
ValArg GHC.List.lengthFB @ GHC.Integer.Type.Integer
ValArg GHC.List.idLength
ValArg GHC.Base.build
@ GHC.Integer.Type.Integer
(\ (@ a_X2iH)
(c_X2iJ [OS=OneShot]
:: GHC.Integer.Type.Integer -> a_X2iH -> a_X2iH)
(n_X2iL [OS=OneShot] :: a_X2iH) ->
c_X2iJ 1 (c_X2iJ 2 (c_X2iJ 3 n_X2iL)))
ValArg GHC.Types.I# 0#
After: (\ (@ a_a2nU)
(@ b_a2nV)
(k_a2nW [Occ=Once] :: a_a2nU -> b_a2nV -> b_a2nV)
(z_a2nX [Occ=Once] :: b_a2nV)
(g_a2nY [Occ=Once!]
:: forall b1_a2nZ.
(a_a2nU -> b1_a2nZ -> b1_a2nZ) -> b1_a2nZ -> b1_a2nZ) ->
g_a2nY @ b_a2nV k_a2nW z_a2nX)
@ GHC.Integer.Type.Integer
@ (GHC.Types.Int -> GHC.Types.Int)
(GHC.List.lengthFB @ GHC.Integer.Type.Integer)
GHC.List.idLength
(\ (@ a_X2iH)
(c_X2iJ [OS=OneShot]
:: GHC.Integer.Type.Integer -> a_X2iH -> a_X2iH)
(n_X2iL [OS=OneShot] :: a_X2iH) ->
c_X2iJ 1 (c_X2iJ 2 (c_X2iJ 3 n_X2iL)))
Cont: StrictArg GHC.Classes.neInt
ApplyToVal nodup (GHC.Types.I# 0#)
Stop[BoringCtxt] GHC.Types.Bool
Rule fired
Rule: Class op show
Before: GHC.Show.show
TyArg GHC.Types.Bool
ValArg GHC.Show.$fShowBool
ValArg GHC.Classes.neInt
(GHC.List.lengthFB
@ GHC.Integer.Type.Integer
1
(GHC.List.lengthFB
@ GHC.Integer.Type.Integer
2
(GHC.List.lengthFB @ GHC.Integer.Type.Integer 3 GHC.List.idLength))
(GHC.Types.I# 0#))
(GHC.Types.I# 0#)
After: GHC.Show.$fShowBool_$cshow
Cont: Stop[BoringCtxt] GHC.Base.String
Rule fired
Rule: /=#
Before: GHC.Prim./=# ValArg x_a2nn ValArg 0#
After: case x_a2nn of _ [Occ=Dead] {
__DEFAULT -> 1#;
0# -> 0#
}
Cont: StrictArg GHC.Prim.tagToEnum#
Select nodup wild_a2Ld
Stop[BoringCtxt] GHC.Base.String
Rule fired
Rule: tagToEnum#
Before: GHC.Prim.tagToEnum# TyArg GHC.Types.Bool ValArg 1#
After: GHC.Types.True
Cont: Select ok wild_a2Ld
Stop[BoringCtxt] GHC.Base.String
Rule fired
Rule: tagToEnum#
Before: GHC.Prim.tagToEnum# TyArg GHC.Types.Bool ValArg 0#
After: GHC.Types.False
Cont: Select ok wild_a2Ld
Stop[BoringCtxt] GHC.Base.String
Rule fired
Rule: +#
Before: GHC.Prim.+# ValArg 0# ValArg 1#
After: 1#
Cont: StrictArg GHC.Types.I#
Select nodup a1_a2nQ
Select nodup wild_a2nl
Stop[BoringCtxt] GHC.Base.String
Rule fired
Rule: +#
Before: GHC.Prim.+# ValArg 1# ValArg 1#
After: 2#
Cont: StrictArg GHC.Types.I#
Select nodup a1_a2nQ
Select nodup wild_a2nl
Stop[BoringCtxt] GHC.Base.String
Rule fired
Rule: +#
Before: GHC.Prim.+# ValArg 2# ValArg 1#
After: 3#
Cont: StrictArg GHC.Types.I#
Select nodup wild_a2nl
Stop[BoringCtxt] GHC.Base.String
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment