Wonderful overview of inlining and specialisation in GHC, and using pragmas to tune optimisation: https://www.stackbuilders.com/tutorials/haskell/ghc-optimization-and-fusion/