add #occurs_free
[lambda.git] / exercises / assignment5.mdwn
index 00ede5a..dabc1a0 100644 (file)
@@ -252,6 +252,7 @@ Again, we've left some gaps. (The use of `type` for the first line in Haskell an
 
 15. Choose one of these languages and fill in the gaps to complete the definition.
 
+<a id="occurs_free"></a>
 16. Write a function `occurs_free` that has the following type:
 
         occurs_free : identifier -> lambda_term -> bool
@@ -329,7 +330,7 @@ any type `α`, as long as your function is of type `α -> α` and you have a bas
         -- Or this:
         let sysf_true = (\y n -> y) :: Sysf_bool a
 
-    Note that in both OCaml and the Haskell code, the generalization `∀'a` on the free type variable `'a` is implicit. If you really want to, you can supply it explicitly in Haskell by saying:
+    Note that in both OCaml and Haskell code, the generalization `∀α` on the free type variable `α` is implicit. If you really want to, you can supply it explicitly in Haskell by saying:
 
         :set -XExplicitForAll
         let { sysf_true :: forall a. Sysf_bool a; ... }
@@ -384,7 +385,7 @@ Yet we haven't given ourselves the capacity to talk about `list [S]` and so on a
     = λf:T -> S. λxs:list. xs [T] [list [S]] (λx:T. λys:list [S]. cons [S] (f x) ys) (nil [S])
 -->
 
-*Update: Never mind, don't bother with the next three questions. They proved to be more difficult to implement in OCaml than we expected. Here is [[some explanation|assignment5 hint3]].*
+*Update: Never mind, don't bother with the next three questions. They proved to be more difficult to implement in OCaml than we expected. Here is [[some explanation|assignment5 hint4]].*
 
 19. Convert this list encoding and the `map` function to OCaml or Haskell. Again, call the type `sysf_list`, and the functions `sysf_nil`, `sysf_cons`, and `sysf_map`, to avoid collision with the names for native lists and functions in these languages. (In OCaml and Haskell you *can* say `('t) sysf_list` or `Sysf_list t`.)
 
@@ -408,7 +409,7 @@ Be sure to test your proposals with simple lists. (You'll have to `sysf_cons` up
         # k 1 true ;;
         - : int = 1
 
-    If you can't understand how one term can have several types, recall our discussion in this week's notes of "principal types". (WHERE?)
+    If you can't understand how one term can have several types, recall our discussion in this week's notes of "principal types".