title: Can GHC really never inline map, scanl, foldr, etc.?
body: <p>I've noticed the <a href="http://www.haskell.org/ghc/docs/7.2.2/html/users_guide/pragmas.html">GHC manual</a> says "for a self-recursive function, the loop breaker can only be the function itself, so an INLINE pragma is always ignored."</p>
  
  <p>Doesn't this say every application of common recursive functional constructs like <code>map</code>, <code>zip</code>, <code>scan*</code>, <code>fold*</code>, <code>sum</code>, etc. cannot be inlined? </p>
  
  <p>You could always rewrite all these function when you employ them, adding appropriate strictness tags, or maybe employ fancy techniques like the "stream fusion" recommended <a href="http://book.realworldhaskell.org/read/profiling-and-optimization.html">here</a>.</p>
  
  <p>Yet, doesn't all this dramatically constrain our ability to write code that's simultaneously fast and elegant?</p>