Flurken

lift turns current stage values into future stage expressions.


#...            value constructors
\...            primitive operative combiners 
[..]            process state
[..] = [..]     reduction rule 
(..)            syntax sugar for list values [#cons .. #nil]
'FOO            syntax sugar for symbol values [#sym ...]
X@[..]          variable binding


[\number? [#num ...] ] = [#bool true]
[\number? [#cons ...]] = [#bool false]
[\number? [#code EXP]] = [#code [\number? EXP]]]


[\lift [#num N]] = [#code [#num N]]
[\lift [#cons A B]] = [#code [\cons [\lift A] [\lift B]]]

[\lift [#clo P S B E]] = [#code [\vau P S B E]]
// do we need let insertion?

[\run [#code E1]    [#code E2]] = [#code [\run E1 E2]]
[\run [notcode ...] [#code E]]  = E


  [\number? [\lift [#num N]]]
~ [\number? [#code [#num N]]]
~ [#code [\number? [#num N]]]         // if we eval under #code
~ [#code [#num N]]