add link to assignment7
[lambda.git] / exercises / assignment8-9.mdwn
index 31b8c96..c41ee9b 100644 (file)
@@ -33,7 +33,7 @@ you should be able to execute the following expression:
         # match eval t2 with Leaf (Num f) -> f 2 4;;
         - : int = 13
 
-2. Based on the evaluator code from the assignment from week 7, and what you've learned about the Reader monad,
+2. Based on [[the evaluator code from assignment 7|/exercises/assignment7/#index3h2]], and what you've learned about the Reader monad,
 enhance the arithmetic tree code to handle an arbitrary set of free variables. Don't use Juli8 libraries for this; just do it by hand.
 Return to the original code (that is, before the modifications required by the previous problem).
 
@@ -137,7 +137,7 @@ Return to the original code (that is, before the modifications required by the p
         -- substitute your own choices for the type Env and value env0
         let { xx :: ReaderT Env Maybe Int; xx = return 1 } in runReaderT xx env0
 
-    Okay, here are some questions about various monad transformers. Use OCaml to help you answer them. Which combined monad has the type of an optional list (that is, either `None` or `Some [...]`): an Option transformer wrapped around an underlying List monad, or a List transformer wrapped around an underlying Option monad? Which combined monad has the type of a function from `store`s to a pair `('a list, store)`: a List transformer wrapped around an underlying State monad or a State transformer wrapped around an underlying List monad?
+    Okay, here are some questions about various monad transformers. Use OCaml or Haskell to help you answer them. Which combined monad has the type of an optional list (that is, either `None` or `Some [...]`): an Option transformer wrapped around an underlying List monad, or a List transformer wrapped around an underlying Option monad? Which combined monad has the type of a function from `store`s to a pair `('a list, store)`: a List transformer wrapped around an underlying State monad or a State transformer wrapped around an underlying List monad?
 
 The last two problems are non-monadic.
 
@@ -149,7 +149,7 @@ The last two problems are non-monadic.
 
     will evaluate to will be `((), n, (), ())` for some number `n` between `0` and `3`. But what number is sensitive to the details of OCaml's evaluation strategy for evaluating tuple expressions. How can you avoid that dependence? That is, how can you rewrite such code to force it that the values in the 4-tuple have been evaluated left-to-right? Show us a strategy that works no matter what the expressions in the tuple are, not just these particular ones. (But you can assume that the expressions all terminate.)
 
-11. In the evaluator code for [[Week 7 homework|/exercises/assignment6-7]], we left the `LetRec` portions unimplemented. How might we implement these for the second, `env`-using interpreter? One strategy would be to interpret expressions like:
+11. In the evaluator code for [[Week 7 homework|/exercises/assignment7]], we left the `LetRec` portions unimplemented. How might we implement these for the second, `env`-using interpreter? One strategy would be to interpret expressions like:
 
         letrec f = \x. BODY in
         TERM