Document and fix code style
This commit is contained in:
parent
21fb6bf5ed
commit
b8aedd541d
1 changed files with 65 additions and 62 deletions
|
|
@ -15,6 +15,10 @@ import TypeCheckerIr
|
||||||
|
|
||||||
|
|
||||||
-- | Lift lambdas and let expression into supercombinators.
|
-- | Lift lambdas and let expression into supercombinators.
|
||||||
|
-- Three phases:
|
||||||
|
-- @freeVars@ annotatss all the free variables.
|
||||||
|
-- @abstract@ converts lambdas into let expressions.
|
||||||
|
-- @collectScs@ moves every non-constant let expression to a top-level function.
|
||||||
lambdaLift :: Program -> Program
|
lambdaLift :: Program -> Program
|
||||||
lambdaLift = collectScs . abstract . freeVars
|
lambdaLift = collectScs . abstract . freeVars
|
||||||
|
|
||||||
|
|
@ -27,7 +31,6 @@ freeVars (Program ds) = [ (n, xs, freeVarsExp (Set.fromList xs) e)
|
||||||
|
|
||||||
freeVarsExp :: Set Id -> Exp -> AnnExp
|
freeVarsExp :: Set Id -> Exp -> AnnExp
|
||||||
freeVarsExp localVars = \case
|
freeVarsExp localVars = \case
|
||||||
|
|
||||||
EId n | Set.member n localVars -> (Set.singleton n, AId n)
|
EId n | Set.member n localVars -> (Set.singleton n, AId n)
|
||||||
| otherwise -> (mempty, AId n)
|
| otherwise -> (mempty, AId n)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue