Slide 33
Slide 33 text
Philipp Haller
Macro for capture checking
33
private def applyCode[E, T, R]
(envExpr: Expr[E], bodyExpr: Expr[E => T => R])
(using Type[E], Type[T], Type[R], Quotes):
Expr[Spore[T, R] { type Env = E }] = {
checkBodyExpr(bodyExpr)
'{
new Spore[T, R] {
type Env = E
def apply(x: T): R = $bodyExpr($envExpr)(x)
...
}
}
}
Check that bodyExpr does
not capture anything