YS
Size: a a a
YS
YS
к
YS
С
С
YS
YS
С
YS
YS
YS
x -> x + 1
и (+1)
YS
YS
module Main where
foo :: Int -> Int
foo = \x -> x + 1
main :: IO ()
main = print (foo 1)
-- незначимые части стг
--
Main.foo :: GHC.Types.Int -> GHC.Types.Int
[GblId, Arity=1, Unf=OtherCon []] =
\r [x_sS1]
let {
sat_sS2 [Occ=Once] :: GHC.Types.Int
[LclId] =
CCCS GHC.Types.I#! [1#];
} in GHC.Num.+ GHC.Num.$fNumInt x_sS1 sat_sS2;
sat_sS5 :: GHC.Types.Int
[LclId] =
\u []
let {
sat_sS4 [Occ=Once] :: GHC.Types.Int
[LclId] =
CCCS GHC.Types.I#! [1#]; } in
let {
sat_sS3 [Occ=Once] :: GHC.Types.Int
[LclId] =
CCCS GHC.Types.I#! [1#];
} in GHC.Num.+ GHC.Num.$fNumInt sat_sS3 sat_sS4;
Main.main :: GHC.Types.IO ()
[GblId] =
\u [] System.IO.print GHC.Show.$fShowInt sat_sS5;
:Main.main :: GHC.Types.IO ()
[GblId] =
\u [] GHC.TopHandler.runMainIO Main.main;
YS
module Main where
foo :: Int -> Int
foo = (+1)
main :: IO ()
main = print (foo 1)
-- незначимые части стг
--
ds_rRn :: GHC.Types.Int
[GblId, Caf=NoCafRefs, Unf=OtherCon []] =
CCS_DONT_CARE GHC.Types.I#! [1#];
Main.foo :: GHC.Types.Int -> GHC.Types.Int
[GblId, Arity=1, Unf=OtherCon []] =
\r [ds1_sS3] GHC.Num.+ GHC.Num.$fNumInt ds1_sS3 ds_rRn;
sat_sS5 :: GHC.Types.Int
[LclId] =
\u []
let {
sat_sS4 [Occ=Once] :: GHC.Types.Int
[LclId] =
CCCS GHC.Types.I#! [1#];
} in GHC.Num.+ GHC.Num.$fNumInt sat_sS4 ds_rRn;
Main.main :: GHC.Types.IO ()
[GblId] =
\u [] System.IO.print GHC.Show.$fShowInt sat_sS5;
:Main.main :: GHC.Types.IO ()
[GblId] =
\u [] GHC.TopHandler.runMainIO Main.main;
YS
(+1)
во втором случае вынесена в топ-левелYS
YS
1
вынесен в топ-левел)YS
YS