--------------------------------------------------------------
-- Dynamic interpreter
--------------------------------------------------------------
-- | dynamic interpreter, it uses 'dynamicBetaReduce'
-- This is a dynamic interpreter because the variable is retrieved only when it's needed even
-- though it might not be in scope when defining the expression. It is not a totally valid
-- interpreter but it is interesting to have.
-- For example, `(λfoo. (foo x) b) (λx y. y (x x))` eventually betaReduces to `b (b b)` since
-- the `x` inside `(foo x) b` eventually resolves to `b`
dynamicInterpreter :: DynamicInterpreter
dynamicInterpreter = DynamicInterpreter


dynamicInterpreter :: DynamicInterpreter
dynamicInterpreter = DynamicInterpreter
dynamicInterpreter = DynamicInterpreter