content: module Main (main) where
  
  import Data.Array.Unboxed
  import System.Environment
  
  main :: IO ()
  main = print (yan 30 + yan 40)
  
  {- we're looking for:
  MAIN        MAIN                    106           0    0.0    0.0     0.0  100.0
   CAF        Main                    211           0    0.0    0.0     0.0   99.1
    yan       Main                    213           2    0.0    0.0     0.0   98.9
     yan.e    Main                    217           1    0.0    0.0     0.0   98.9
      big     Main                    218           1    0.0   98.9     0.0   98.9
    main      Main                    212           1    0.0    0.2     0.0    0.2
     yan      Main                    214           0    0.0    0.0     0.0    0.0
      yan.\   Main                    215           2    0.0    0.0     0.0    0.0
       yan1   Main                    216           2    0.0    0.0     0.0    0.0
  
  Note the 2 entries for yan.\, the lambda expression inside yan.
  -}
  
  big :: Int -> Int
  big x = (array (0,1000000) [(0,x)] :: UArray Int Int) ! 0
  
  yan = let e = big 20 in \x -> {-# SCC yan1 #-} x + e
  