polysemy-0.1.0.0

Safe HaskellNone
LanguageHaskell2010

Polysemy.Internal.Performance.TH

Synopsis

Documentation

inlineRecursiveCalls :: Q [Dec] -> Q [Dec] Source #

GHC has a really hard time inlining recursive calls---such as those used in interpreters for higher-order effects. This can have disastrous repercussions for your performance.

Fortunately there's a solution, but it's ugly boilerplate. You can enable -XTemplateHaskell and use inlineRecursiveCalls to convince GHC to make these functions fast again.

inlineRecursiveCalls [d|
  factorial :: Int -> Int
  factorial 0 = 1
  factorial n = n * factorial (n - 1)
  |]