module Problem3 where import qualified Problem3.Eval_expanded import qualified Problem3.Main import qualified Problem3.GenericType import qualified Problem3.Eval3 -- Code from exam question: Problem3/QuestionCode.hs {- -- Problem 3(a): see Problem3/Eval_expanded.hs What would the types |Eval1|, |Eval2| look like without using anything from |Control.Monad.*| (expand out the types and simplify away the |newtype|s)? -- Problem 3(b): see Problem3/Main.hs What does |main| print? Motivate. -- Problem 3(c): see Problem3/GenericType.hs At what type is |test1| used in |main|? Why is it defined with a more general type? -- Problem 3(d): see Problem3/Eval3.hs Use monad transformers to extend the original |Eval1|, |runEval1| to |Eval3|, |runEval3| adding read-only access to an environment |Env|. Annotate the definition of |runEval3| with the types at the intermediate stages of the ``composition pipeline''. (For the ``pipeline'' |f . g . h| that would be the return types of |g| and |h|.) -}