Hmmm. So you think maybe it's doing something like (roughly; I don't have the exact case in front of me)

(\p q -> f p (g p q)) this that

==> beta reduce

let
  p = this
  q = that
in f p (g p q)

==> inline q

let
  p = this
in f p (g p that)
?

I tried marking the "this" in question INLINE CONLIKE [0]. Shouldn't that tell GHC that duplicating it is fine? I really want to see it for RULES.


David Feuer
Well-Typed, LLP

-------- Original message --------
From: Simon Peyton Jones <simonpj@microsoft.com>
Date: 3/26/18 7:14 PM (GMT-05:00)
To: David Feuer <david@well-typed.com>, ghc-devs@haskell.org
Subject: RE: Missed beta reductions

GHC always beta-reduces.

It does not always inline.   For that: -ddump-inlinings

Simon

From: ghc-devs <ghc-devs-bounces@haskell.org> On Behalf Of David Feuer
Sent: 26 March 2018 23:59
To: ghc-devs@haskell.org
Subject: Missed beta reductions

What's the best way to find spots where GHC saw a redex and choose not to beta reduce? Is there a flag for that? It could be useful when trying to figure out why rules aren't firing.


David Feuer
Well-Typed, LLP