toggle bodies -
[1 of 1] Compiling Main             ( test.hs, test.o )
==================== Tidy Core ====================
Result size of Tidy Core = {terms: 237, types: 190, coercions: 9}
Main.fib1 = __integer 0
Main.fib3 = __integer 1
Main.fib2 = __integer 2
Main.fib_fib =
  \ (ds_dzg :: GHC.Integer.Type.Integer) ->
    case GHC.Integer.Type.eqInteger ds_dzg Main.fib1 of _ {
      False ->
        case GHC.Integer.Type.eqInteger ds_dzg Main.fib3 of _ {
          False ->
            GHC.Integer.Type.plusInteger
              (Main.fib_fib (GHC.Integer.Type.minusInteger ds_dzg Main.fib3))
              (Main.fib_fib (GHC.Integer.Type.minusInteger ds_dzg Main.fib2));
          True -> Main.fib3
        };
      True -> Main.fib1
    }
end Rec }
Main.fib_$sfib =
  \ (eta_B1 :: GHC.Integer.Type.Integer) -> Main.fib_fib eta_B1
Main.$wfib =
  \ (@ a_auy)
    (@ a1_auz)
    (ww_s1T4 :: a_auy -> a_auy -> GHC.Types.Bool)
    (w_s1T7 :: GHC.Num.Num a_auy)
    (ww1_s1Ta :: a1_auz -> a1_auz -> a1_auz)
    (ww2_s1Tg :: GHC.Integer.Type.Integer -> a1_auz)
    (w1_s1Ti :: a_auy) ->
    let {
      lvl_sCU :: a_auy
      [LclId, Str=DmdType]
      lvl_sCU = GHC.Num.fromInteger @ a_auy w_s1T7 Main.fib3 } in
    let {
      lvl1_sCV :: a_auy
      [LclId, Str=DmdType]
      lvl1_sCV = GHC.Num.fromInteger @ a_auy w_s1T7 Main.fib2 } in
    let {
      lvl2_sCW :: a1_auz
      [LclId, Str=DmdType]
      lvl2_sCW = ww2_s1Tg Main.fib3 } in
    let {
      lvl3_sCX :: a_auy
      [LclId, Str=DmdType]
      lvl3_sCX = GHC.Num.fromInteger @ a_auy w_s1T7 Main.fib3 } in
    let {
      lvl4_sCY :: a1_auz
      [LclId, Str=DmdType]
      lvl4_sCY = ww2_s1Tg Main.fib1 } in
    let {
      lvl5_sCZ [Dmd=Just L] :: a_auy
      [LclId, Str=DmdType]
      lvl5_sCZ = GHC.Num.fromInteger @ a_auy w_s1T7 Main.fib1 } in
    let {
      lvl6_s1Uj :: a_auy -> a_auy -> a_auy
      [LclId]
      lvl6_s1Uj = GHC.Num.- @ a_auy w_s1T7 } in
    letrec {
      fib4_sBD [Occ=LoopBreaker] :: a_auy -> a1_auz
      [LclId, Arity=1, Str=DmdType L]
      fib4_sBD =
        \ (ds_dzg :: a_auy) ->
          case ww_s1T4 ds_dzg lvl5_sCZ of _ {
            False ->
              case ww_s1T4 ds_dzg lvl3_sCX of _ {
                False ->
                  ww1_s1Ta
                    (fib4_sBD (lvl6_s1Uj ds_dzg lvl_sCU))
                    (fib4_sBD (lvl6_s1Uj ds_dzg lvl1_sCV));
                True -> lvl2_sCW
              };
            True -> lvl4_sCY
          }; } in
    fib4_sBD w1_s1Ti
Main.fib =
  \ (@ a_auy)
    (@ a1_auz)
    (w_s1T2 :: GHC.Classes.Eq a_auy)
    (w1_s1T7 :: GHC.Num.Num a_auy)
    (w2_s1T8 :: GHC.Num.Num a1_auz)
    (w3_s1Ti :: a_auy) ->
    case w_s1T2 of _ { GHC.Classes.D:Eq ww_s1T4 ww1_s1T5 ->
    case w2_s1T8
    of _
    { GHC.Num.D:Num ww2_s1Ta
                    ww3_s1Tb
                    ww4_s1Tc
                    ww5_s1Td
                    ww6_s1Te
                    ww7_s1Tf
                    ww8_s1Tg ->
    Main.$wfib
      @ a_auy @ a1_auz ww_s1T4 w1_s1T7 ww2_s1Ta ww8_s1Tg w3_s1Ti
    }
    }
Main.value1 = D# 41.0
Main.main8 = D# 80.0
Main.main7 = D# 10.0
Main.main6 =
  :
    @ Double Main.main7 ([] @ Double)
Main.main5 = : @ Double Main.main8 Main.main6
Main.value = : @ Double Main.value1 Main.main5
Main.main9 =
  GHC.Float.$w$sshowSignedFloat
    GHC.Float.$fShowDouble_$sshowFloat GHC.Float.minExpt 41.0
lvl19_r1Vs =
  :
    @ Char
    GHC.Show.showList__2
    ([] @ Char)
Main.main_showl =
  \ (ds2_aPF :: [GHC.Types.Double]) ->
    case ds2_aPF of _ {
      [] -> lvl19_r1Vs;
      : y_aPK ys_aPL ->
        :
          @ Char
          GHC.Show.showList__1
          (case y_aPK of _ { D# ww_X1Tc ->
           GHC.Float.$w$sshowSignedFloat
             GHC.Float.$fShowDouble_$sshowFloat
             GHC.Float.minExpt
             ww_X1Tc
             (Main.main_showl ys_aPL)
           })
    }
end Rec }
Main.main4 = Main.main_showl Main.main5
Main.main3 = Main.main9 Main.main4
Main.main2 =
  : @ Char GHC.Show.showList__3 Main.main3
Main.main_fib =
  \ (ds_dzg :: GHC.Integer.Type.Integer) ->
    case GHC.Integer.Type.eqInteger ds_dzg Main.fib1 of _ {
      False ->
        case GHC.Integer.Type.eqInteger ds_dzg Main.fib3 of _ {
          False ->
            GHC.Integer.Type.plusInteger
              (Main.main_fib (GHC.Integer.Type.minusInteger ds_dzg Main.fib3))
              (Main.main_fib (GHC.Integer.Type.minusInteger ds_dzg Main.fib2));
          True -> Main.fib3
        };
      True -> Main.fib1
    }
end Rec }
Main.main12 = __integer 24
Main.main11 = Main.main_fib Main.main12
Main.main10 =
  GHC.Show.$w$cshowsPrec
    0 Main.main11 ([] @ Char)
Main.main13 = unpackCString# "hello world"
Main.main1 =
  \ (eta_Xm :: GHC.Prim.State# GHC.Prim.RealWorld) ->
    case GHC.IO.Handle.Text.hPutStr2
           GHC.IO.Handle.FD.stdout Main.main13 True eta_Xm
    of _ { (# ipv_aQ2, _ #) ->
    case GHC.IO.Handle.Text.hPutStr2
           GHC.IO.Handle.FD.stdout Main.main10 True ipv_aQ2
    of _ { (# ipv2_XQO, _ #) ->
    GHC.IO.Handle.Text.hPutStr2
      GHC.IO.Handle.FD.stdout Main.main2 True ipv2_XQO
    }
    }
Main.main = Main.main1 `cast` ...
Main.main14 =
  \ (eta_Xp :: GHC.Prim.State# GHC.Prim.RealWorld) ->
    GHC.TopHandler.runMainIO1 @ () (Main.main1 `cast` ...) eta_Xp
:Main.main = Main.main14 `cast` ...
------ Local rules for imported ids --------
"SPEC Main.fib [GHC.Integer.Type.Integer, GHC.Integer.Type.Integer]" [ALWAYS]
    forall ($dEq_sCR :: GHC.Classes.Eq GHC.Integer.Type.Integer)
           ($dNum_sCS :: GHC.Num.Num GHC.Integer.Type.Integer)
           ($dNum1_sCT :: GHC.Num.Num GHC.Integer.Type.Integer).
      Main.fib @ GHC.Integer.Type.Integer
               @ GHC.Integer.Type.Integer
               $dEq_sCR
               $dNum_sCS
               $dNum1_sCT
      = Main.fib_$sfib
Linking test ...