coroutines tweak
[lambda.git] / coroutines_and_aborts.mdwn
index a0b35c8..3d58e31 100644 (file)
@@ -338,7 +338,27 @@ So what I should have said is that when you evaluate the expression:
 
 *and that exception is never caught*, then the effect is for the program to immediately stop.
 
-Of course, it's possible to handle errors in other ways too. There's no reason why the implementation of `List.nth` *had* to do things this way. They might instead have returned `Some a` when the list had an nth member `a`, and `None` when it does not. But it's pedagogically useful for us to think about this pattern now.
+Trivia: what's the type of the `raise (Failure "two")` in:
+
+       if x = 1 then 10
+       else raise (Failure "two")
+
+What's its type in:
+
+       if x = 1 then "ten"
+       else raise (Failure "two")
+
+So now what do you expect the type of this to be:
+
+       fun x -> raise (Failure "two")
+
+How about this:
+
+       (fun x -> raise (Failure "two") : 'a -> 'a)
+
+Remind you of anything we discussed earlier? /Trivia.
+
+Of course, it's possible to handle errors in other ways too. There's no reason why the implementation of `List.nth` *had* to raise an exception. They might instead have returned `Some a` when the list had an nth member `a`, and `None` when it does not. But it's pedagogically useful for us to think about this pattern now.
 
 When an exception is raised, it percolates up through the code that called it, until it finds a surrounding `try ... with ...` that matches it. That might not be the first `try ... with ...` that it encounters. For example: