Context for the LiftM monad.
- liftInstParamOnly : Bool
If
liftInstParamOnlyistrue, then only local functions that take local instances as parameters are lambda lifted. - suffix : Name
Suffix for the new auxiliary declarations being created.
- mainDecl : Decl
Declaration where lambda lifting is being applied. We use it to provide the "base name" for auxiliary declarations and the flag
safe. - inheritInlineAttrs : Bool
If true, the lambda-lifted functions inherit the inline attribute from
mainDecl. We use this feature to implement@[inline] instance ...and@[always_inline] instance ... - minSize : Nat
Only local functions with
size > minSizeare lambda lifted. We use this feature to implement@[inline] instance ...and@[always_inline] instance ...
Instances For
Monad for applying lambda lifting.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Return true if the given declaration takes a local instance as a parameter.
We lambda lift this kind of local function declaration before specialization.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Return true if the given declaration should be lambda lifted.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Eliminate all local function declarations.
Equations
- One or more equations did not get rendered due to their size.
Instances For
During eager lambda lifting, we inspect declarations that are not inlineable or instances (doing it everywhere can accidentally introduce mutual recursion which the compiler cannot handle well at the moment). We then lift local function declarations that take local instances as parameters from their body to ensure they are specialized.
Equations
- One or more equations did not get rendered due to their size.