-- > eval' e (+100)
-- 108
-- > eval' e id
-- 8


----- ~~~~~~~~~~~~~~~ -----
----- ~~~~~~~~~~~~~~~ -----


-- Step 2 - Defunctionalization
--------------------------------

-- Abstract machines are first-order concepts. 
-- We need to simulate higher orderness

-- Basic idea: Represent the continuations we actually need using a datatype

eval0 :: Expr -> Int
eval0 e = eval' e id
eval0 :: Expr -> Int
eval0 e = eval' e id
eval0 e = eval' e id