reset the monad.
need to think about assuming variable
reimplement reduction, and make variable typed.