Commit c5645041 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Comments only

parent 1c1bfbe7
......@@ -615,6 +615,8 @@ If you write nothing at all, you get defaultInlinePragma:
It's not possible to get that combination by *writing* something, so
if an Id has defaultInlinePragma it means the user didn't specify anything.
If inl_inline = True, then the Id should have an InlineRule unfolding.
Note [CONLIKE pragma]
~~~~~~~~~~~~~~~~~~~~~
The ConLike constructor of a RuleMatchInfo is aimed at the following.
......
......@@ -645,11 +645,13 @@ When you say
you intend that calls (f e) are replaced by <rhs>[e/x] So we
should capture (\x.<rhs>) in the Unfolding of 'f', and never meddle
with it. Meanwhile, we can optimise <rhs> to our heart's content,
leaving the original unfolding intact in Unfolding of 'f'.
leaving the original unfolding intact in Unfolding of 'f'. For example
all xs = foldr (&&) True xs
any p = all . map p {-# INLINE any #-}
We optimise any's RHS fully, but leave the InlineRule saying "all . map p",
which deforests well at the call site.
So the representation of an Unfolding has changed quite a bit
(see CoreSyn). An INLINE pragma gives rise to an InlineRule
unfolding.
So INLINE pragma gives rise to an InlineRule, which captures the original RHS.
Moreover, it's only used when 'f' is applied to the
specified number of arguments; that is, the number of argument on
......
......@@ -808,7 +808,7 @@ opt_co_tc_app env sym tc cos
, let ty = substTy env co2
= substTyWith [tv] [ty] opt_co1_body -- An inefficient one-variable substitution
| otherwise -- Do not push sym inside top-level axioms
| otherwise -- Do *not* push sym inside top-level axioms
-- e.g. if g is a top-level axiom
-- g a : F a ~ a
-- Then (sym (g ty)) /= g (sym ty) !!
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment