title: Is there any reason not to use the INLINABLE pragma for a function?
body: <p>The <a href="http://www.haskell.org/ghc/docs/latest/html/users_guide/pragmas.html" rel="noreferrer">documentation</a> states:</p>
  
  <blockquote>
    <p>An {-# INLINABLE f #-} pragma on a function f has the following behaviour: </p>
    
    <ul>
    <li><p>While INLINE says "please inline me", the INLINABLE says "feel free to inline me; use your discretion". In other words the choice is left to GHC, which uses the same rules as for pragma-free functions. Unlike INLINE, that decision is made at the call site, and will therefore be affected by the inlining threshold, optimisation level etc. </p></li>
    <li><p>Like INLINE, the INLINABLE pragma retains a copy of the original RHS for inlining purposes, and persists it in the interface file, regardless of the size of the RHS. </p></li>
    <li><p>One way to use INLINABLE is in conjunction with the special function inline (Section 7.18, “Special built-in functions”). The call inline f tries very hard to inline f. To make sure that f can be inlined, it is a good idea to mark the definition of f as INLINABLE, so that GHC guarantees to expose an unfolding regardless of how big it is. Moreover, by annotating f as INLINABLE, you ensure that f's original RHS is inlined, rather than whatever random optimised version of f GHC's optimiser has produced. </p></li>
    <li><p>The INLINABLE pragma also works with SPECIALISE: if you mark function f as INLINABLE, then you can subsequently SPECIALISE in another module (see Section 7.16.8, “SPECIALIZE pragma”).</p></li>
    <li><p>Unlike INLINE, it is OK to use an INLINABLE pragma on a recursive function. The principal reason do to so to allow later use of SPECIALISE</p></li>
    </ul>
  </blockquote>
  
  <p>What's the disadvantage of it?</p>
  
  <p>Does it make interface files much, much bigger? Does it make compilation much slower?</p>
  
  <p>Is there any reason I shouldn't put an INLINABLE pragma on every exported function I write? Is there any reason GHC doesn't put an INLINABLE pragma on every exported function I write?</p>