Version 5, adding MonadReader to hide context.

In version 4, the introduction of error catching allowed
us to capture errors and output relevant messages to the end user.

Our new goal is to abstract the env from these computations
as only Var and Abs actually use them.  This will be done by
incorporating a MonadReader, which will hold the execution context
of our computations and allow us to extend (Abs) and retrieve it
for application (Var) by "ask"ing the Monad Reader for its values.