Andreas Klebinger pushed to branch wip/apk/unfold-dicts at Glasgow Haskell Compiler / GHC

Commits:

14 changed files:

Changes:

  • changelog.d/T27802-classop-arg-size
    1
    +section: compiler
    
    2
    +issues: #27802
    
    3
    +mrs: !16675
    
    4
    +synopsis:
    
    5
    +  Account for arguments applied to unary class methods when computing unfolding size.
    
    6
    +description: {
    
    7
    +  Due to a bug we considered the application of arguments to a unary class method free
    
    8
    +  during expression size calculation. We now accurately calculate the discount again.
    
    9
    +
    
    10
    +  This might make some functions heavy on single-class method use no longer inline.
    
    11
    +}

  • changelog.d/T27818-unfolding-size-casts-ticks
    1
    +section: compiler
    
    2
    +issues: #27818
    
    3
    +mrs: !16675
    
    4
    +synopsis:
    
    5
    +  Fixed a bug that caused newtypes and cost centres to affect inlining decisions.

  • compiler/GHC/Core/Unfold.hs
    ... ... @@ -335,6 +335,10 @@ isValFun :: CoreExpr -> Bool
    335 335
     -- one top-level value lambda
    
    336 336
     isValFun (Lam b e) | isRuntimeVar b = True
    
    337 337
                        | otherwise      = isValFun e
    
    338
    +-- A tick can be code which *can* change the runtime semantics here.
    
    339
    +-- But we want to ignore it anyway. See Note [Ticks and Cast should not impact unfolding guidance]
    
    340
    +isValFun (Tick _t e)                = isValFun e
    
    341
    +isValFun (Cast e _co)               = isValFun e
    
    338 342
     isValFun _                          = False
    
    339 343
     
    
    340 344
     calcUnfoldingGuidance
    
    ... ... @@ -669,6 +673,11 @@ sizeExpr opts !bOMB_OUT_SIZE top_args expr
    669 673
               is_inline_scrut (Var v) =
    
    670 674
                 isUnliftedType (idType v)
    
    671 675
                   -- isUnliftedType is OK here: scrutinees have a fixed RuntimeRep (search for FRRCase)
    
    676
    +          -- Even if this makes the check technically wrong we want to
    
    677
    +          -- look through ticks here.
    
    678
    +          -- See Note [Ticks and Cast should not impact unfolding guidance]
    
    679
    +          is_inline_scrut (Tick _t e)  = is_inline_scrut e
    
    680
    +          is_inline_scrut (Cast e _co) = is_inline_scrut e
    
    672 681
               is_inline_scrut scrut
    
    673 682
                   | (Var f, _) <- collectArgs scrut
    
    674 683
                     = case idDetails f of
    
    ... ... @@ -709,7 +718,7 @@ sizeExpr opts !bOMB_OUT_SIZE top_args expr
    709 718
                FCallId _                     -> sizeN (callSize (length val_args) voids)
    
    710 719
                DataConWorkId dc              -> conSize    dc (length val_args)
    
    711 720
                PrimOpId op _                 -> primOpSize op (length val_args)
    
    712
    -           ClassOpId cls _               -> classOpSize opts cls top_args val_args
    
    721
    +           ClassOpId cls _               -> classOpSize opts cls top_args val_args voids
    
    713 722
                _ | fun `hasKey` buildIdKey   -> buildSize
    
    714 723
                  | fun `hasKey` augmentIdKey -> augmentSize
    
    715 724
                  | otherwise                 -> funSize opts top_args fun (length val_args) voids
    
    ... ... @@ -761,9 +770,11 @@ sizeExpr opts !bOMB_OUT_SIZE top_args expr
    761 770
         -- and typePrimRep will crash
    
    762 771
         isZeroBitId id = not (isJoinId id) && isZeroBitTy (idType id)
    
    763 772
     
    
    764
    -    isZeroBitExpr (Var id)   = isZeroBitId id
    
    765
    -    isZeroBitExpr (Tick _ e) = isZeroBitExpr e
    
    766
    -    isZeroBitExpr _          = False
    
    773
    +    -- [Ticks and Cast should not impact unfolding guidance]
    
    774
    +    isZeroBitExpr (Var id)     = isZeroBitId id
    
    775
    +    isZeroBitExpr (Tick _t e)  = isZeroBitExpr e
    
    776
    +    isZeroBitExpr (Cast e _co) = isZeroBitExpr e
    
    777
    +    isZeroBitExpr _            = False
    
    767 778
     
    
    768 779
     -- | Finds a nominal size of a string literal.
    
    769 780
     litSize :: Literal -> Int
    
    ... ... @@ -777,21 +788,31 @@ litSize _other = 0 -- Must match size of nullary constructors
    777 788
                           -- Key point: if  x |-> 4, then x must inline unconditionally
    
    778 789
                           --            (eg via case binding)
    
    779 790
     
    
    780
    -classOpSize :: UnfoldingOpts -> Class -> [Id] -> [CoreExpr] -> ExprSize
    
    791
    +classOpSize :: UnfoldingOpts -> Class -> [Id] -> [CoreExpr] -> Int -> ExprSize
    
    781 792
     -- See (IA1) in Note [Interesting arguments] in GHC.Core.Opt.Simplify.Utils
    
    782
    -classOpSize _opts _cls _top_args []
    
    793
    +classOpSize _opts _cls _top_args [] _voids
    
    783 794
       = sizeZero   -- A non-applied classop
    
    784
    -classOpSize opts cls top_args (dict_arg:other_val_args)
    
    785
    -  = SizeIs size (arg_discount dict_arg) 0
    
    795
    +classOpSize opts cls top_args (dict_arg:other_val_args) voids
    
    796
    +  = SizeIs size dict_arg_discount 0
    
    786 797
       where
    
    787
    -    size | isUnaryClass cls = 0    -- See (UCM4) in Note [Unary class magic] in GHC.Core.TyCon
    
    788
    -         | otherwise        = 20 + (10 * length other_val_args)
    
    798
    +    -- See (UCM4) in Note [Unary class magic] in GHC.Core.TyCon
    
    799
    +    op_app_size = if isUnaryClass cls then 0 else 20
    
    800
    +
    
    801
    +    -- Size penalty for applying the extracted class method to it's
    
    802
    +    -- arguments.
    
    803
    +    method_app_size
    
    804
    +      | null other_val_args = 0 -- we don't actually apply the result
    
    805
    +      | otherwise = callSize (length other_val_args) voids
    
    806
    +
    
    807
    +    size = op_app_size + method_app_size
    
    789 808
     
    
    790 809
         -- If the class op is scrutinising a lambda bound dictionary then
    
    791 810
         -- give it a discount, to encourage the inlining of this function
    
    792
    -    arg_discount (Cast arg _co)                    = arg_discount arg
    
    793
    -    arg_discount (Var dict) | dict `elem` top_args = unitBag (dict, dict_discount)
    
    794
    -    arg_discount _                                 = emptyBag
    
    811
    +    dict_arg_discount = case getIdFromTrivialExpr_maybe dict_arg of
    
    812
    +      Nothing -> emptyBag
    
    813
    +      Just var
    
    814
    +        | var `elem` top_args -> unitBag (var, dict_discount)
    
    815
    +        | otherwise -> emptyBag
    
    795 816
     
    
    796 817
         -- If we have (class-op d arg1 .. argn) then it's super-good to inline
    
    797 818
         -- to expose `d`; not only can we do the dictionary selection
    
    ... ... @@ -1051,6 +1072,23 @@ In a function application (f a b)
    1051 1072
         get a saturated application)
    
    1052 1073
     
    
    1053 1074
     Code for manipulating sizes
    
    1075
    +
    
    1076
    +Note [Ticks and Cast should not impact unfolding guidance]
    
    1077
    +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    1078
    +We want to ignore ticks and casts when
    
    1079
    +computing unfolding guidance. The reason is simple:
    
    1080
    +
    
    1081
    +We want inlining to be robust if a user changes a type alias
    
    1082
    +to a newtype, if the code is otherwise the same.
    
    1083
    +
    
    1084
    +Similarly we want inlining to behave the same for a core expression
    
    1085
    +(<tick> e) as it does for `e`.
    
    1086
    +This is **independent** of the kind of tick we are dealing with.
    
    1087
    +Even for ticks that represent code at runtime we generally want
    
    1088
    +to inline as-if no tick is present. This way profiled code will
    
    1089
    +be closer to non-profiled code, which leads to more accurate profiles.
    
    1090
    +
    
    1091
    +So we take care to look through Cast/Ticks wherever possible.
    
    1054 1092
     -}
    
    1055 1093
     
    
    1056 1094
     -- | The size of a candidate expression for unfolding
    

  • testsuite/tests/arityanal/should_compile/Arity01.stderr
    ... ... @@ -45,7 +45,7 @@ F1.s1 = GHC.Internal.Bignum.Integer.IS 3#
    45 45
     
    
    46 46
     -- RHS size: {terms: 8, types: 7, coercions: 0, joins: 0/0}
    
    47 47
     s :: forall {t1} {t2}. Num t1 => (t1 -> t2) -> t2
    
    48
    -[GblId, Arity=2, Str=<MP(A,A,A,A,A,A,1C(1,L))><1C(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 60] 50 0}]
    
    48
    +[GblId, Arity=2, Str=<MP(A,A,A,A,A,A,1C(1,L))><1C(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 60] 60 0}]
    
    49 49
     s = \ (@t) (@t1) ($dNum :: Num t) (f :: t -> t1) -> f (fromInteger @t $dNum F1.s1)
    
    50 50
     
    
    51 51
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    

  • testsuite/tests/arityanal/should_compile/Arity05.stderr
    ... ... @@ -9,12 +9,12 @@ F5.f5g1 = GHC.Internal.Bignum.Integer.IS 1#
    9 9
     
    
    10 10
     -- RHS size: {terms: 12, types: 9, coercions: 0, joins: 0/0}
    
    11 11
     f5g :: forall {a} {t}. Num a => (t -> a) -> t -> a
    
    12
    -[GblId, Arity=3, Str=<SP(1C(1,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 60 0] 90 0}]
    
    12
    +[GblId, Arity=3, Str=<SP(1C(1,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 60 0] 110 0}]
    
    13 13
     f5g = \ (@a) (@t) ($dNum :: Num a) (h :: t -> a) (z :: t) -> + @a $dNum (h z) (fromInteger @a $dNum F5.f5g1)
    
    14 14
     
    
    15 15
     -- RHS size: {terms: 17, types: 12, coercions: 0, joins: 0/0}
    
    16 16
     f5h :: forall {a} {t}. Num a => (t -> a) -> t -> (t -> a) -> a
    
    17
    -[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L><MC(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 60 0 60] 150 0}]
    
    17
    +[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L><MC(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 60 0 60] 180 0}]
    
    18 18
     f5h = \ (@a) (@t) ($dNum :: Num a) (f :: t -> a) (x :: t) (g :: t -> a) -> + @a $dNum (f x) (+ @a $dNum (g x) (fromInteger @a $dNum F5.f5g1))
    
    19 19
     
    
    20 20
     -- RHS size: {terms: 4, types: 1, coercions: 0, joins: 0/0}
    

  • testsuite/tests/arityanal/should_compile/Arity08.stderr
    ... ... @@ -3,12 +3,12 @@
    3 3
     Result size of Tidy Core = {terms: 24, types: 18, coercions: 0, joins: 0/0}
    
    4 4
     
    
    5 5
     -- RHS size: {terms: 20, types: 10, coercions: 0, joins: 0/0}
    
    6
    -f8f :: forall {p}. Num p => Bool -> p -> p -> p
    
    7
    -[GblId, Arity=4, Str=<LP(SC(S,C(1,L)),A,MC(1,C(1,L)),A,A,A,A)><1L><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 30 0 0] 140 0}]
    
    6
    +f8f :: forall {a}. Num a => Bool -> a -> a -> a
    
    7
    +[GblId, Arity=4, Str=<LP(SC(S,C(1,L)),A,MC(1,C(1,L)),A,A,A,A)><1L><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 30 0 0] 170 0}]
    
    8 8
     f8f
    
    9
    -  = \ (@p) ($dNum :: Num p) (b :: Bool) (x :: p) (y :: p) ->
    
    9
    +  = \ (@a) ($dNum :: Num a) (b :: Bool) (x :: a) (y :: a) ->
    
    10 10
           case b of {
    
    11
    -        False -> + @p $dNum (+ @p $dNum x y) (* @p $dNum x x);
    
    11
    +        False -> + @a $dNum (+ @a $dNum x y) (* @a $dNum x x);
    
    12 12
             True -> y
    
    13 13
           }
    
    14 14
     
    

  • testsuite/tests/arityanal/should_compile/Arity11.stderr
    ... ... @@ -19,7 +19,7 @@ F11.fib1 = GHC.Internal.Bignum.Integer.IS 0#
    19 19
     
    
    20 20
     -- RHS size: {terms: 54, types: 27, coercions: 0, joins: 0/5}
    
    21 21
     fib :: forall {t1} {t2}. (Eq t1, Num t1, Num t2) => t1 -> t2
    
    22
    -[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A)><LP(A,LC(L,C(1,L)),A,A,A,A,L)><LP(LC(S,C(1,L)),A,A,A,A,A,MC(1,L))><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 450 180 0] 480 0}]
    
    22
    +[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A)><LP(A,LC(L,C(1,L)),A,A,A,A,L)><LP(LC(S,C(1,L)),A,A,A,A,A,MC(1,L))><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 450 180 0] 570 0}]
    
    23 23
     fib
    
    24 24
       = \ (@t) (@t1) ($dEq :: Eq t) ($dNum :: Num t) ($dNum1 :: Num t1) (eta :: t) ->
    
    25 25
           let {
    
    ... ... @@ -105,7 +105,7 @@ F11.f11f1 = \ (y :: Integer) -> GHC.Internal.Bignum.Integer.integerAdd F11.f11_x
    105 105
     -- RHS size: {terms: 3, types: 2, coercions: 0, joins: 0/0}
    
    106 106
     f11f :: forall {p}. p -> Integer -> Integer
    
    107 107
     [GblId, Arity=2, Str=<A><SL>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=True)}]
    
    108
    -f11f = \ (@p) _ [Occ=Dead] -> F11.f11f1
    
    108
    +f11f = \ (@p) (z [Occ=Dead] :: p) -> F11.f11f1
    
    109 109
     
    
    110 110
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    111 111
     F11.f5 :: Integer
    

  • testsuite/tests/arityanal/should_compile/Arity14.stderr
    ... ... @@ -14,7 +14,7 @@ F14.f2 = GHC.Internal.Bignum.Integer.IS 1#
    14 14
     
    
    15 15
     -- RHS size: {terms: 36, types: 23, coercions: 0, joins: 0/3}
    
    16 16
     f14 :: forall {t}. (Ord t, Num t) => t -> t -> t -> t
    
    17
    -[GblId, Arity=4, Str=<SP(A,A,SC(S,C(1,L)),A,A,A,A,A)><LP(LC(L,C(1,L)),A,A,A,A,A,MC(1,L))><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 270 0 0] 310 0}]
    
    17
    +[GblId, Arity=4, Str=<SP(A,A,SC(S,C(1,L)),A,A,A,A,A)><LP(LC(L,C(1,L)),A,A,A,A,A,MC(1,L))><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 270 0 0] 350 0}]
    
    18 18
     f14
    
    19 19
       = \ (@t) ($dOrd :: Ord t) ($dNum :: Num t) (eta :: t) (eta1 :: t) ->
    
    20 20
           let {
    

  • testsuite/tests/deSugar/should_compile/T16615.stderr
    ... ... @@ -9,7 +9,7 @@ g :: Int -> Bool
    9 9
     [LclIdX,
    
    10 10
      Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    11 11
              Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    12
    -         Guidance=IF_ARGS [0] 120 10}]
    
    12
    +         Guidance=IF_ARGS [0] 140 10}]
    
    13 13
     g = \ (i :: Int) ->
    
    14 14
           case ==
    
    15 15
                  @Int GHC.Internal.Classes.$fEqInt i (GHC.Internal.Types.I# 0#)
    
    ... ... @@ -23,7 +23,7 @@ f [Occ=LoopBreaker] :: Int -> Bool
    23 23
     [LclIdX,
    
    24 24
      Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    25 25
              Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    26
    -         Guidance=IF_ARGS [0] 120 10}]
    
    26
    +         Guidance=IF_ARGS [0] 140 10}]
    
    27 27
     f = \ (i :: Int) ->
    
    28 28
           case ==
    
    29 29
                  @Int GHC.Internal.Classes.$fEqInt i (GHC.Internal.Types.I# 0#)
    

  • testsuite/tests/dmdanal/should_compile/T23398.stderr
    ... ... @@ -10,7 +10,7 @@ foo :: forall a. PairDict a => a -> a -> String
    10 10
      Str=<SP(SP(1C(1,C(1,L)),A),SP(A,1C(1,L),A))><L><L>,
    
    11 11
      Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    12 12
              Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    13
    -         Guidance=IF_ARGS [90 0 0] 180 0}]
    
    13
    +         Guidance=IF_ARGS [90 0 0] 210 0}]
    
    14 14
     foo
    
    15 15
       = \ (@a) ($dCTuple2 :: PairDict a) (eta :: a) (eta1 :: a) ->
    
    16 16
           case ==
    

  • testsuite/tests/ghci.debugger/scripts/break021.stdout
    ... ... @@ -41,7 +41,7 @@ _result :: IO () = _
    41 41
           ^^^^^^^^^^^^^^^^^
    
    42 42
     13    in_another_module 0
    
    43 43
     Stopped in Main.in_another_decl, break020.hs:(6,21)-(7,30)
    
    44
    -_result :: IO () = _
    
    44
    +_result :: m () = _
    
    45 45
     5  
    
    46 46
                          vv
    
    47 47
     6  in_another_decl _ = do line1 0
    
    ... ... @@ -49,25 +49,25 @@ _result :: IO () = _
    49 49
                                      ^^
    
    50 50
     8  
    
    51 51
     Stopped in Main.in_another_decl, break020.hs:6:24-30
    
    52
    -_result :: IO () = _
    
    52
    +_result :: m () = _
    
    53 53
     5  
    
    54 54
     6  in_another_decl _ = do line1 0
    
    55 55
                               ^^^^^^^
    
    56 56
     7                         line2 0
    
    57 57
     Stopped in Main.line1, break020.hs:3:11-19
    
    58
    -_result :: IO () = _
    
    58
    +_result :: m () = _
    
    59 59
     2  
    
    60 60
     3  line1 _ = return ()
    
    61 61
                  ^^^^^^^^^
    
    62 62
     4  line2 _ = return ()
    
    63 63
     Stopped in Main.in_another_decl, break020.hs:7:24-30
    
    64
    -_result :: IO () = _
    
    64
    +_result :: m () = _
    
    65 65
     6  in_another_decl _ = do line1 0
    
    66 66
     7                         line2 0
    
    67 67
                               ^^^^^^^
    
    68 68
     8  
    
    69 69
     Stopped in Main.line2, break020.hs:4:11-19
    
    70
    -_result :: IO () = _
    
    70
    +_result :: m () = _
    
    71 71
     3  line1 _ = return ()
    
    72 72
     4  line2 _ = return ()
    
    73 73
                  ^^^^^^^^^
    

  • testsuite/tests/perf/compiler/T25723.hs
    ... ... @@ -9,6 +9,12 @@
    9 9
     {-# LANGUAGE TypeOperators       #-}
    
    10 10
     
    
    11 11
     {-# OPTIONS_GHC -flate-specialise -O2 #-}
    
    12
    +-- The purpose of this test it to ensure we get a nice recursive loop inside main.
    
    13
    +-- Where otherwise we would allocate a intermediate tuple if we fail to inline a join
    
    14
    +-- point (#25723).
    
    15
    +-- As unfolding guidance changed the join point never materialized so we use a
    
    16
    +-- different threshold to ensure we still test the expect behaviour.
    
    17
    +{-# OPTIONS_GHC -funfolding-use-threshold=120 #-}
    
    12 18
     
    
    13 19
     module Main (main) where
    
    14 20
     
    

  • testsuite/tests/simplCore/should_compile/T15205.stderr
    ... ... @@ -10,7 +10,7 @@ f :: forall a b. C a b => a -> b
    10 10
      Str=<1P(A,1C(1,C(1,L)))><L>,
    
    11 11
      Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    12 12
              Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    13
    -         Guidance=IF_ARGS [90 0] 40 0}]
    
    13
    +         Guidance=IF_ARGS [90 0] 50 0}]
    
    14 14
     f = \ (@a) (@b) ($dC :: C a b) (eta :: a) -> op @a @b $dC eta eta
    
    15 15
     
    
    16 16
     
    

  • testsuite/tests/simplCore/should_compile/T26117.stderr
    ... ... @@ -6,83 +6,7 @@ T26117.hs:17:10: warning: [GHC-06201] [-Wmissing-methods (in -Wdefault)]
    6 6
     
    
    7 7
     ==================== Tidy Core ====================
    
    8 8
     Result size of Tidy Core
    
    9
    -  = {terms: 196, types: 296, coercions: 2, joins: 0/0}
    
    10
    -
    
    11
    --- RHS size: {terms: 7, types: 18, coercions: 0, joins: 0/0}
    
    12
    -op1 [InlPrag=[~]] :: forall a b. C a b => F a -> a -> b -> Int
    
    13
    -[GblId[ClassOp],
    
    14
    - Arity=1,
    
    15
    - Str=<S!P(SL,A)>,
    
    16
    - Unf=Unf{Src=StableSystem, TopLvl=True,
    
    17
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    18
    -         Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
    
    19
    -         Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: C a b) ->
    
    20
    -                 case v of { T26117.C:C v2 [Occ=Once1] _ [Occ=Dead] -> v2 }}]
    
    21
    -op1
    
    22
    -  = \ (@a) (@b) (v :: C a b) ->
    
    23
    -      case v of v1 { T26117.C:C v2 v3 -> v2 }
    
    24
    -
    
    25
    --- RHS size: {terms: 7, types: 18, coercions: 0, joins: 0/0}
    
    26
    -op2 [InlPrag=[~]] :: forall a b. C a b => F a -> a -> b -> Int
    
    27
    -[GblId[ClassOp],
    
    28
    - Arity=1,
    
    29
    - Str=<S!P(A,SL)>,
    
    30
    - Unf=Unf{Src=StableSystem, TopLvl=True,
    
    31
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    32
    -         Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
    
    33
    -         Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: C a b) ->
    
    34
    -                 case v of { T26117.C:C _ [Occ=Dead] v3 [Occ=Once1] -> v3 }}]
    
    35
    -op2
    
    36
    -  = \ (@a) (@b) (v :: C a b) ->
    
    37
    -      case v of v1 { T26117.C:C v2 v3 -> v3 }
    
    38
    -
    
    39
    --- RHS size: {terms: 7, types: 17, coercions: 0, joins: 0/0}
    
    40
    -T26117.$p1D [InlPrag=[~]] :: forall a b. D a b => Eq (F a)
    
    41
    -[GblId[ClassOp],
    
    42
    - Arity=1,
    
    43
    - Str=<S!P(SL,A,A)>,
    
    44
    - Unf=Unf{Src=StableSystem, TopLvl=True,
    
    45
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    46
    -         Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
    
    47
    -         Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: D a b) ->
    
    48
    -                 case v of { T26117.C:D v2 [Occ=Once1] _ [Occ=Dead] _ [Occ=Dead] ->
    
    49
    -                 v2
    
    50
    -                 }}]
    
    51
    -T26117.$p1D
    
    52
    -  = \ (@a) (@b) (v :: D a b) ->
    
    53
    -      case v of v1 { T26117.C:D v2 v3 v4 -> v2 }
    
    54
    -
    
    55
    --- RHS size: {terms: 7, types: 17, coercions: 0, joins: 0/0}
    
    56
    -dop1 [InlPrag=[~]] :: forall a b. D a b => a -> b -> b
    
    57
    -[GblId[ClassOp],
    
    58
    - Arity=1,
    
    59
    - Str=<S!P(A,SL,A)>,
    
    60
    - Unf=Unf{Src=StableSystem, TopLvl=True,
    
    61
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    62
    -         Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
    
    63
    -         Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: D a b) ->
    
    64
    -                 case v of { T26117.C:D _ [Occ=Dead] v3 [Occ=Once1] _ [Occ=Dead] ->
    
    65
    -                 v3
    
    66
    -                 }}]
    
    67
    -dop1
    
    68
    -  = \ (@a) (@b) (v :: D a b) ->
    
    69
    -      case v of v1 { T26117.C:D v2 v3 v4 -> v3 }
    
    70
    -
    
    71
    --- RHS size: {terms: 7, types: 17, coercions: 0, joins: 0/0}
    
    72
    -dop2 [InlPrag=[~]] :: forall a b. D a b => a -> b -> b
    
    73
    -[GblId[ClassOp],
    
    74
    - Arity=1,
    
    75
    - Str=<S!P(A,A,SL)>,
    
    76
    - Unf=Unf{Src=StableSystem, TopLvl=True,
    
    77
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    78
    -         Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
    
    79
    -         Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: D a b) ->
    
    80
    -                 case v of { T26117.C:D _ [Occ=Dead] _ [Occ=Dead] v4 [Occ=Once1] ->
    
    81
    -                 v4
    
    82
    -                 }}]
    
    83
    -dop2
    
    84
    -  = \ (@a) (@b) (v :: D a b) ->
    
    85
    -      case v of v1 { T26117.C:D v2 v3 v4 -> v4 }
    
    9
    +  = {terms: 153, types: 148, coercions: 2, joins: 0/0}
    
    86 10
     
    
    87 11
     -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
    
    88 12
     T26117.$fCaList1 :: GHC.Internal.Prim.Addr#
    
    ... ... @@ -92,28 +16,6 @@ T26117.$fCaList1 :: GHC.Internal.Prim.Addr#
    92 16
              Guidance=IF_ARGS [] 70 0}]
    
    93 17
     T26117.$fCaList1 = "T26117.hs:17:10-37|\CANop2\EM"#
    
    94 18
     
    
    95
    --- RHS size: {terms: 6, types: 15, coercions: 0, joins: 0/0}
    
    96
    -T26117.$fCaList_$cop2 [InlPrag=[2]]
    
    97
    -  :: forall a b. (Eq (F a), D a b) => F a -> a -> [b] -> Int
    
    98
    -[GblId,
    
    99
    - Arity=2,
    
    100
    - Str=<B><B>b,
    
    101
    - Cpr=b,
    
    102
    - Unf=Unf{Src=StableSystem, TopLvl=True,
    
    103
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    104
    -         Guidance=ALWAYS_IF(arity=2,unsat_ok=True,boring_ok=True)
    
    105
    -         Tmpl= \ (@a) (@b) _ [Occ=Dead] _ [Occ=Dead] ->
    
    106
    -                 GHC.Internal.Control.Exception.Base.noMethodBindingError
    
    107
    -                   @GHC.Internal.Types.LiftedRep
    
    108
    -                   @(F a -> a -> [b] -> Int)
    
    109
    -                   T26117.$fCaList1}]
    
    110
    -T26117.$fCaList_$cop2
    
    111
    -  = \ (@a) (@b) _ [Occ=Dead] _ [Occ=Dead] ->
    
    112
    -      GHC.Internal.Control.Exception.Base.noMethodBindingError
    
    113
    -        @GHC.Internal.Types.LiftedRep
    
    114
    -        @(F a -> a -> [b] -> Int)
    
    115
    -        T26117.$fCaList1
    
    116
    -
    
    117 19
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    118 20
     T26117.$fCaList3 :: Int
    
    119 21
     [GblId,
    
    ... ... @@ -130,11 +32,48 @@ T26117.$fCaList2 :: Int
    130 32
              Guidance=IF_ARGS [] 10 10}]
    
    131 33
     T26117.$fCaList2 = GHC.Internal.Types.I# 3#
    
    132 34
     
    
    35
    +-- RHS size: {terms: 16, types: 16, coercions: 0, joins: 0/0}
    
    36
    +T26117.$fCaList_$cop1
    
    37
    +  :: forall a b. (Eq (F a), D a b) => F a -> a -> [b] -> Int
    
    38
    +[GblId,
    
    39
    + Arity=5,
    
    40
    + Str=<1P(1C(1,C(1,L)),A)><A><L><A><A>,
    
    41
    + Cpr=1,
    
    42
    + Unf=Unf{Src=StableSystem, TopLvl=True,
    
    43
    +         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    44
    +         Guidance=ALWAYS_IF(arity=5,unsat_ok=True,boring_ok=False)
    
    45
    +         Tmpl= \ (@a)
    
    46
    +                 (@b)
    
    47
    +                 ($dEq [Occ=Once1] :: Eq (F a))
    
    48
    +                 ($dD [Occ=Dead] :: D a b)
    
    49
    +                 (x :: F a)
    
    50
    +                 (ds [Occ=Dead] :: a)
    
    51
    +                 (ds1 [Occ=Dead] :: [b]) ->
    
    52
    +                 case == @(F a) $dEq x x of {
    
    53
    +                   False -> T26117.$fCaList3;
    
    54
    +                   True -> T26117.$fCaList2
    
    55
    +                 }}]
    
    56
    +T26117.$fCaList_$cop1
    
    57
    +  = \ (@a)
    
    58
    +      (@b)
    
    59
    +      ($dEq :: Eq (F a))
    
    60
    +      ($dD [Occ=Dead, OS=OneShot] :: D a b)
    
    61
    +      (x :: F a)
    
    62
    +      (ds [Occ=Dead] :: a)
    
    63
    +      (ds1 [Occ=Dead] :: [b]) ->
    
    64
    +      case == @(F a) $dEq x x of {
    
    65
    +        False -> T26117.$fCaList3;
    
    66
    +        True -> T26117.$fCaList2
    
    67
    +      }
    
    68
    +
    
    133 69
     -- RHS size: {terms: 8, types: 7, coercions: 2, joins: 0/0}
    
    134 70
     lvl :: forall b. F Int -> Int -> [b] -> Int
    
    135
    -[GblId, Arity=3, Str=<1A><A><A>, Cpr=1, Unf=OtherCon []]
    
    71
    +[GblId, Arity=3, Str=<SL><A><A>, Cpr=1, Unf=OtherCon []]
    
    136 72
     lvl
    
    137
    -  = \ (@b) (x :: F Int) _ [Occ=Dead] _ [Occ=Dead] ->
    
    73
    +  = \ (@b)
    
    74
    +      (x :: F Int)
    
    75
    +      (ds [Occ=Dead] :: Int)
    
    76
    +      (ds1 [Occ=Dead] :: [b]) ->
    
    138 77
           case x `cast` (Sub T26117.D:R:FInt :: F Int ~R# Bool) of lwild
    
    139 78
           { __DEFAULT ->
    
    140 79
           T26117.$fCaList2
    
    ... ... @@ -164,7 +103,7 @@ T26117.$fCaList_$s$fCaList [InlPrag=CONLIKE]
    164 103
      Unf=DFun: \ (@b) ($dD :: D Int b) ->
    
    165 104
            T26117.C:C TYPE: Int
    
    166 105
                       TYPE: [b]
    
    167
    -                  \ (x :: F Int) _ [Occ=Dead] _ [Occ=Dead] ->
    
    106
    +                  \ (x :: F Int) (ds [Occ=Dead] :: Int) (ds1 [Occ=Dead] :: [b]) ->
    
    168 107
                         case GHC.Internal.Prim.dataToTagSmall#
    
    169 108
                                @GHC.Internal.Types.Lifted
    
    170 109
                                @Bool
    
    ... ... @@ -187,19 +126,10 @@ T26117.$fCaList_$s$fCaList [InlPrag=CONLIKE]
    187 126
                         @GHC.Internal.Types.LiftedRep
    
    188 127
                         @(F Int -> Int -> [b] -> Int)
    
    189 128
                         "T26117.hs:17:10-37|\CANop2\EM"#]
    
    190
    -T26117.$fCaList_$s$fCaList = \ (@b) _ [Occ=Dead] -> lvl2 @b
    
    191
    -
    
    192
    --- RHS size: {terms: 4, types: 9, coercions: 0, joins: 0/0}
    
    193
    -lvl3 :: forall b a. F a -> a -> [b] -> Int
    
    194
    -[GblId, Str=b, Cpr=b]
    
    195
    -lvl3
    
    196
    -  = \ (@b) (@a) ->
    
    197
    -      GHC.Internal.Control.Exception.Base.noMethodBindingError
    
    198
    -        @GHC.Internal.Types.LiftedRep
    
    199
    -        @(F a -> a -> [b] -> Int)
    
    200
    -        T26117.$fCaList1
    
    129
    +T26117.$fCaList_$s$fCaList
    
    130
    +  = \ (@b) ($dD [Occ=Dead] :: D Int b) -> lvl2 @b
    
    201 131
     
    
    202
    --- RHS size: {terms: 18, types: 21, coercions: 0, joins: 0/0}
    
    132
    +-- RHS size: {terms: 10, types: 20, coercions: 0, joins: 0/0}
    
    203 133
     T26117.$fCaList [InlPrag=CONLIKE]
    
    204 134
       :: forall a b. (Eq (F a), D a b) => C a [b]
    
    205 135
     [GblId[DFunId],
    
    ... ... @@ -208,225 +138,203 @@ T26117.$fCaList [InlPrag=CONLIKE]
    208 138
      Unf=DFun: \ (@a) (@b) (v :: Eq (F a)) (v1 :: D a b) ->
    
    209 139
            T26117.C:C TYPE: a
    
    210 140
                       TYPE: [b]
    
    211
    -                  \ (x :: F a) _ [Occ=Dead] _ [Occ=Dead] ->
    
    212
    -                    case == @(F a) v x x of {
    
    213
    -                      False -> T26117.$fCaList3;
    
    214
    -                      True -> T26117.$fCaList2
    
    215
    -                    }
    
    216
    -                  T26117.$fCaList_$cop2 @a @b v v1]
    
    141
    +                  T26117.$fCaList_$cop1 @a @b v v1
    
    142
    +                  GHC.Internal.Control.Exception.Base.noMethodBindingError
    
    143
    +                    @GHC.Internal.Types.LiftedRep
    
    144
    +                    @(F a -> a -> [b] -> Int)
    
    145
    +                    T26117.$fCaList1]
    
    217 146
     T26117.$fCaList
    
    218
    -  = \ (@a) (@b) ($dEq :: Eq (F a)) _ [Occ=Dead] ->
    
    147
    +  = \ (@a) (@b) ($dEq :: Eq (F a)) ($dD :: D a b) ->
    
    219 148
           T26117.C:C
    
    220 149
             @a
    
    221 150
             @[b]
    
    222
    -        (\ (x :: F a) _ [Occ=Dead] _ [Occ=Dead] ->
    
    223
    -           case == @(F a) $dEq x x of {
    
    224
    -             False -> T26117.$fCaList3;
    
    225
    -             True -> T26117.$fCaList2
    
    226
    -           })
    
    227
    -        (lvl3 @b @a)
    
    151
    +        (T26117.$fCaList_$cop1 @a @b $dEq $dD)
    
    152
    +        (GHC.Internal.Control.Exception.Base.noMethodBindingError
    
    153
    +           @GHC.Internal.Types.LiftedRep
    
    154
    +           @(F a -> a -> [b] -> Int)
    
    155
    +           T26117.$fCaList1)
    
    228 156
     
    
    229 157
     -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
    
    230
    -T26117.$trModule4 :: GHC.Internal.Prim.Addr#
    
    231
    -[GblId,
    
    232
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    233
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    234
    -         Guidance=IF_ARGS [] 20 0}]
    
    235
    -T26117.$trModule4 = "main"#
    
    158
    +$trModule1 :: GHC.Internal.Prim.Addr#
    
    159
    +[GblId, Unf=OtherCon []]
    
    160
    +$trModule1 = "main"#
    
    236 161
     
    
    237 162
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    238
    -T26117.$trModule3 :: GHC.Internal.Types.TrName
    
    239
    -[GblId,
    
    240
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    241
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    242
    -         Guidance=IF_ARGS [] 10 10}]
    
    243
    -T26117.$trModule3 = GHC.Internal.Types.TrNameS T26117.$trModule4
    
    163
    +$trModule2 :: GHC.Internal.Types.TrName
    
    164
    +[GblId, Unf=OtherCon []]
    
    165
    +$trModule2 = GHC.Internal.Types.TrNameS $trModule1
    
    244 166
     
    
    245 167
     -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
    
    246
    -T26117.$trModule2 :: GHC.Internal.Prim.Addr#
    
    247
    -[GblId,
    
    248
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    249
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    250
    -         Guidance=IF_ARGS [] 30 0}]
    
    251
    -T26117.$trModule2 = "T26117"#
    
    168
    +$trModule3 :: GHC.Internal.Prim.Addr#
    
    169
    +[GblId, Unf=OtherCon []]
    
    170
    +$trModule3 = "T26117"#
    
    252 171
     
    
    253 172
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    254
    -T26117.$trModule1 :: GHC.Internal.Types.TrName
    
    255
    -[GblId,
    
    256
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    257
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    258
    -         Guidance=IF_ARGS [] 10 10}]
    
    259
    -T26117.$trModule1 = GHC.Internal.Types.TrNameS T26117.$trModule2
    
    173
    +$trModule4 :: GHC.Internal.Types.TrName
    
    174
    +[GblId, Unf=OtherCon []]
    
    175
    +$trModule4 = GHC.Internal.Types.TrNameS $trModule3
    
    260 176
     
    
    261 177
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    262
    -T26117.$trModule :: GHC.Internal.Types.Module
    
    263
    -[GblId,
    
    264
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    265
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    266
    -         Guidance=IF_ARGS [] 10 10}]
    
    267
    -T26117.$trModule
    
    268
    -  = GHC.Internal.Types.Module T26117.$trModule3 T26117.$trModule1
    
    178
    +T26117.$trModule [InlPrag=[~]] :: GHC.Internal.Types.Module
    
    179
    +[GblId, Unf=OtherCon []]
    
    180
    +T26117.$trModule = GHC.Internal.Types.Module $trModule2 $trModule4
    
    269 181
     
    
    270 182
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    271 183
     $krep :: GHC.Internal.Types.KindRep
    
    272 184
     [GblId, Unf=OtherCon []]
    
    273 185
     $krep
    
    274 186
       = GHC.Internal.Types.KindRepFun
    
    275
    -      GHC.Internal.Types.krep$* GHC.Internal.Types.krep$Constraint
    
    187
    +      GHC.Internal.Types.KindRepType GHC.Internal.Types.KindRepConstraint
    
    276 188
     
    
    277 189
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    278
    -T26117.$tcC1 [InlPrag=[~]] :: GHC.Internal.Types.KindRep
    
    190
    +$krep1 :: GHC.Internal.Types.KindRep
    
    279 191
     [GblId, Unf=OtherCon []]
    
    280
    -T26117.$tcC1
    
    281
    -  = GHC.Internal.Types.KindRepFun GHC.Internal.Types.krep$* $krep
    
    192
    +$krep1
    
    193
    +  = GHC.Internal.Types.KindRepFun
    
    194
    +      GHC.Internal.Types.KindRepType $krep
    
    282 195
     
    
    283 196
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    284
    -$krep1 :: GHC.Internal.Types.KindRep
    
    197
    +$krep2 :: GHC.Internal.Types.KindRep
    
    285 198
     [GblId, Unf=OtherCon []]
    
    286
    -$krep1 = GHC.Internal.Types.KindRepVar 1#
    
    199
    +$krep2 = GHC.Internal.Types.KindRepVar 1#
    
    287 200
     
    
    288 201
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    289
    -$krep2 :: GHC.Internal.Types.KindRep
    
    202
    +$krep3 :: GHC.Internal.Types.KindRep
    
    290 203
     [GblId, Unf=OtherCon []]
    
    291
    -$krep2 = GHC.Internal.Types.KindRepFun $krep1 $krep1
    
    204
    +$krep3 = GHC.Internal.Types.KindRepFun $krep2 $krep2
    
    292 205
     
    
    293 206
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    294
    -$krep3 :: GHC.Internal.Types.KindRep
    
    207
    +$krep4 :: GHC.Internal.Types.KindRep
    
    295 208
     [GblId, Unf=OtherCon []]
    
    296
    -$krep3 = GHC.Internal.Types.KindRepVar 0#
    
    209
    +$krep4 = GHC.Internal.Types.KindRepVar 0#
    
    297 210
     
    
    298 211
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    299
    -$krep4 :: GHC.Internal.Types.KindRep
    
    212
    +$krep5 :: GHC.Internal.Types.KindRep
    
    300 213
     [GblId, Unf=OtherCon []]
    
    301
    -$krep4 = GHC.Internal.Types.KindRepFun $krep3 $krep2
    
    214
    +$krep5 = GHC.Internal.Types.KindRepFun $krep4 $krep3
    
    302 215
     
    
    303 216
     -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
    
    304
    -T26117.$tcD2 :: GHC.Internal.Prim.Addr#
    
    305
    -[GblId,
    
    306
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    307
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    308
    -         Guidance=IF_ARGS [] 20 0}]
    
    309
    -T26117.$tcD2 = "D"#
    
    217
    +$tcD1 :: GHC.Internal.Prim.Addr#
    
    218
    +[GblId, Unf=OtherCon []]
    
    219
    +$tcD1 = "D"#
    
    310 220
     
    
    311 221
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    312
    -T26117.$tcD1 :: GHC.Internal.Types.TrName
    
    313
    -[GblId,
    
    314
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    315
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    316
    -         Guidance=IF_ARGS [] 10 10}]
    
    317
    -T26117.$tcD1 = GHC.Internal.Types.TrNameS T26117.$tcD2
    
    222
    +$tcD2 :: GHC.Internal.Types.TrName
    
    223
    +[GblId, Unf=OtherCon []]
    
    224
    +$tcD2 = GHC.Internal.Types.TrNameS $tcD1
    
    318 225
     
    
    319 226
     -- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0}
    
    320
    -T26117.$tcD :: GHC.Internal.Types.TyCon
    
    321
    -[GblId,
    
    322
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    323
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    324
    -         Guidance=IF_ARGS [] 10 10}]
    
    227
    +T26117.$tcD [InlPrag=[~]] :: GHC.Internal.Types.TyCon
    
    228
    +[GblId, Unf=OtherCon []]
    
    325 229
     T26117.$tcD
    
    326 230
       = GHC.Internal.Types.TyCon
    
    327 231
           18427868686024955676#Word64
    
    328 232
           4087453451394481638#Word64
    
    329 233
           T26117.$trModule
    
    330
    -      T26117.$tcD1
    
    234
    +      $tcD2
    
    331 235
           0#
    
    332
    -      T26117.$tcC1
    
    236
    +      $krep1
    
    333 237
     
    
    334 238
     -- RHS size: {terms: 3, types: 2, coercions: 0, joins: 0/0}
    
    335
    -$krep5 :: [GHC.Internal.Types.KindRep]
    
    239
    +$krep6 :: [GHC.Internal.Types.KindRep]
    
    336 240
     [GblId, Unf=OtherCon []]
    
    337
    -$krep5
    
    241
    +$krep6
    
    338 242
       = GHC.Internal.Types.:
    
    339 243
           @GHC.Internal.Types.KindRep
    
    340
    -      $krep1
    
    244
    +      $krep2
    
    341 245
           (GHC.Internal.Types.[] @GHC.Internal.Types.KindRep)
    
    342 246
     
    
    343 247
     -- RHS size: {terms: 3, types: 1, coercions: 0, joins: 0/0}
    
    344
    -$krep6 :: [GHC.Internal.Types.KindRep]
    
    248
    +$krep7 :: [GHC.Internal.Types.KindRep]
    
    345 249
     [GblId, Unf=OtherCon []]
    
    346
    -$krep6
    
    347
    -  = GHC.Internal.Types.: @GHC.Internal.Types.KindRep $krep3 $krep5
    
    250
    +$krep7
    
    251
    +  = GHC.Internal.Types.: @GHC.Internal.Types.KindRep $krep4 $krep6
    
    348 252
     
    
    349 253
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    350
    -$krep7 :: GHC.Internal.Types.KindRep
    
    254
    +$krep8 :: GHC.Internal.Types.KindRep
    
    351 255
     [GblId, Unf=OtherCon []]
    
    352
    -$krep7 = GHC.Internal.Types.KindRepTyConApp T26117.$tcD $krep6
    
    256
    +$krep8 = GHC.Internal.Types.KindRepTyConApp T26117.$tcD $krep7
    
    353 257
     
    
    354 258
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    355
    -$krep8 :: GHC.Internal.Types.KindRep
    
    259
    +$krep9 :: GHC.Internal.Types.KindRep
    
    356 260
     [GblId, Unf=OtherCon []]
    
    357
    -$krep8 = GHC.Internal.Types.KindRepFun $krep4 $krep7
    
    261
    +$krep9 = GHC.Internal.Types.KindRepFun $krep5 $krep8
    
    358 262
     
    
    359 263
     -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
    
    360
    -T26117.$tc'C:D1 [InlPrag=[~]] :: GHC.Internal.Types.KindRep
    
    264
    +$krep10 :: GHC.Internal.Types.KindRep
    
    361 265
     [GblId, Unf=OtherCon []]
    
    362
    -T26117.$tc'C:D1 = GHC.Internal.Types.KindRepFun $krep4 $krep8
    
    266
    +$krep10 = GHC.Internal.Types.KindRepFun $krep5 $krep9
    
    363 267
     
    
    364 268
     -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
    
    365
    -T26117.$tc'C:D3 :: GHC.Internal.Prim.Addr#
    
    366
    -[GblId,
    
    367
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    368
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    369
    -         Guidance=IF_ARGS [] 20 0}]
    
    370
    -T26117.$tc'C:D3 = "'C:D"#
    
    269
    +$tc'C:D1 :: GHC.Internal.Prim.Addr#
    
    270
    +[GblId, Unf=OtherCon []]
    
    271
    +$tc'C:D1 = "'C:D"#
    
    371 272
     
    
    372 273
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    373
    -T26117.$tc'C:D2 :: GHC.Internal.Types.TrName
    
    374
    -[GblId,
    
    375
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    376
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    377
    -         Guidance=IF_ARGS [] 10 10}]
    
    378
    -T26117.$tc'C:D2 = GHC.Internal.Types.TrNameS T26117.$tc'C:D3
    
    274
    +$tc'C:D2 :: GHC.Internal.Types.TrName
    
    275
    +[GblId, Unf=OtherCon []]
    
    276
    +$tc'C:D2 = GHC.Internal.Types.TrNameS $tc'C:D1
    
    379 277
     
    
    380 278
     -- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0}
    
    381
    -T26117.$tc'C:D :: GHC.Internal.Types.TyCon
    
    382
    -[GblId,
    
    383
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    384
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    385
    -         Guidance=IF_ARGS [] 10 10}]
    
    279
    +T26117.$tc'C:D [InlPrag=[~]] :: GHC.Internal.Types.TyCon
    
    280
    +[GblId, Unf=OtherCon []]
    
    386 281
     T26117.$tc'C:D
    
    387 282
       = GHC.Internal.Types.TyCon
    
    388 283
           14714477993590114477#Word64
    
    389 284
           17388374250742016296#Word64
    
    390 285
           T26117.$trModule
    
    391
    -      T26117.$tc'C:D2
    
    286
    +      $tc'C:D2
    
    392 287
           2#
    
    393
    -      T26117.$tc'C:D1
    
    288
    +      $krep10
    
    394 289
     
    
    395 290
     -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
    
    396
    -T26117.$tcC3 :: GHC.Internal.Prim.Addr#
    
    397
    -[GblId,
    
    398
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    399
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    400
    -         Guidance=IF_ARGS [] 20 0}]
    
    401
    -T26117.$tcC3 = "C"#
    
    291
    +$tcC1 :: GHC.Internal.Prim.Addr#
    
    292
    +[GblId, Unf=OtherCon []]
    
    293
    +$tcC1 = "C"#
    
    402 294
     
    
    403 295
     -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
    
    404
    -T26117.$tcC2 :: GHC.Internal.Types.TrName
    
    405
    -[GblId,
    
    406
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    407
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    408
    -         Guidance=IF_ARGS [] 10 10}]
    
    409
    -T26117.$tcC2 = GHC.Internal.Types.TrNameS T26117.$tcC3
    
    296
    +$tcC2 :: GHC.Internal.Types.TrName
    
    297
    +[GblId, Unf=OtherCon []]
    
    298
    +$tcC2 = GHC.Internal.Types.TrNameS $tcC1
    
    410 299
     
    
    411 300
     -- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0}
    
    412
    -T26117.$tcC :: GHC.Internal.Types.TyCon
    
    413
    -[GblId,
    
    414
    - Unf=Unf{Src=<vanilla>, TopLvl=True,
    
    415
    -         Value=True, ConLike=True, WorkFree=True, Expandable=True,
    
    416
    -         Guidance=IF_ARGS [] 10 10}]
    
    301
    +T26117.$tcC [InlPrag=[~]] :: GHC.Internal.Types.TyCon
    
    302
    +[GblId, Unf=OtherCon []]
    
    417 303
     T26117.$tcC
    
    418 304
       = GHC.Internal.Types.TyCon
    
    419 305
           6116531860557468422#Word64
    
    420 306
           17953227584944457497#Word64
    
    421 307
           T26117.$trModule
    
    422
    -      T26117.$tcC2
    
    308
    +      $tcC2
    
    423 309
           0#
    
    424
    -      T26117.$tcC1
    
    310
    +      $krep1
    
    425 311
     
    
    426 312
     
    
    427 313
     ------ Local rules for imported ids --------
    
    314
    +"USPEC $cop1 @Int @_"
    
    315
    +    forall (@b) ($dEq [Occ=Dead] :: Eq (F Int)) ($dD :: D Int b).
    
    316
    +      T26117.$fCaList_$cop1 @Int @b $dEq $dD
    
    317
    +      = \ (x :: F Int) (ds [Occ=Dead] :: Int) (ds1 [Occ=Dead] :: [b]) ->
    
    318
    +          case GHC.Internal.Prim.dataToTagSmall#
    
    319
    +                 @GHC.Internal.Types.Lifted
    
    320
    +                 @Bool
    
    321
    +                 (x `cast` (Sub T26117.D:R:FInt :: F Int ~R# Bool))
    
    322
    +          of a# [Occ=Once1]
    
    323
    +          { __DEFAULT ->
    
    324
    +          case GHC.Internal.Prim.dataToTagSmall#
    
    325
    +                 @GHC.Internal.Types.Lifted
    
    326
    +                 @Bool
    
    327
    +                 (x `cast` (Sub T26117.D:R:FInt :: F Int ~R# Bool))
    
    328
    +          of b# [Occ=Once1]
    
    329
    +          { __DEFAULT ->
    
    330
    +          case GHC.Internal.Prim.==# a# b# of {
    
    331
    +            __DEFAULT -> GHC.Internal.Types.I# 4#;
    
    332
    +            1# -> GHC.Internal.Types.I# 3#
    
    333
    +          }
    
    334
    +          }
    
    335
    +          }
    
    428 336
     "USPEC $fCaList @Int @_"
    
    429
    -    forall (@b) ($dD :: D Int b) ($dEq :: Eq (F Int)).
    
    337
    +    forall (@b) ($dEq [Occ=Dead] :: Eq (F Int)) ($dD :: D Int b).
    
    430 338
           T26117.$fCaList @Int @b $dEq $dD
    
    431 339
           = T26117.$fCaList_$s$fCaList @b $dD
    
    432 340