-- ...(let w = C x in ...(w p q)...)...
-- we want to see that w is strict in its two arguments
- wrap_unf = mkInlineRule needSaturated wrap_rhs (length dict_args + length id_args)
+ wrap_unf = mkInlineRule wrap_rhs (Just (length dict_args + length id_args))
wrap_rhs = mkLams wrap_tvs $
mkLams eq_args $
mkLams dict_args $ mkLams id_args $
-- becuase we use that to generate a top-level binding
-- for the ClassOp
- info | new_tycon = base_info
- -- For newtype dictionaries, just inline the class op
- -- See Note [Single-method classes] in TcInstDcls
- | otherwise = base_info
- `setSpecInfo` mkSpecInfo [rule]
+ info = base_info `setSpecInfo` mkSpecInfo [rule]
`setInlinePragInfo` neverInlinePragma
- -- Otherwise add a magic BuiltinRule, and never inline it
- -- so that the rule is always available to fire.
- -- See Note [ClassOp/DFun selection] in TcInstDcls
+ -- Add a magic BuiltinRule, and never inline it
+ -- so that the rule is always available to fire.
+ -- See Note [ClassOp/DFun selection] in TcInstDcls
n_ty_args = length tyvars