From a9fc616a72a86be53a9ce7289fa3608799b44956 Mon Sep 17 00:00:00 2001 From: Jim Pryor Date: Wed, 1 Dec 2010 01:59:05 -0500 Subject: [PATCH] lists-monad tweaks Signed-off-by: Jim Pryor --- list_monad_as_continuation_monad.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/list_monad_as_continuation_monad.mdwn b/list_monad_as_continuation_monad.mdwn index 0edec255..200b4b0a 100644 --- a/list_monad_as_continuation_monad.mdwn +++ b/list_monad_as_continuation_monad.mdwn @@ -88,7 +88,7 @@ need to posit a store `s` that we can apply `u` to. Once we do so, however, we won't have an `'a`; we'll have a pair whose first element is an `'a`. So we have to unpack the pair: - ... let (a, s') = u s in ... (f a) ... + ... let (a, s') = u s in ... f a ... Abstracting over the `s` and adjusting the types gives the result: @@ -222,7 +222,7 @@ fold that function over its type `'a` members, and that's where we can get at th ... u (fun (a : 'a) (b : 'b) -> ... f a ... ) ... -In order for `u` to have the kind of argument it needs, the `fun a b -> ... f a ...` has to have type `'a -> 'b -> 'b`; so the `... f a ...` has to evaluate to a result of type `'b`. The easiest way to do this is to collapse (or "unify") the types `'b` and `'d`, with the result that `f a` will have type `('c -> 'b -> 'b) -> 'b -> 'b`. Let's postulate an argument `k` of type `('c -> 'b -> 'b)` and supply it to `(f a)`: +In order for `u` to have the kind of argument it needs, the `fun a b -> ... f a ...` has to have type `'a -> 'b -> 'b`; so the `... f a ...` has to evaluate to a result of type `'b`. The easiest way to do this is to collapse (or "unify") the types `'b` and `'d`, with the result that `f a` will have type `('c -> 'b -> 'b) -> 'b -> 'b`. Let's postulate an argument `k` of type `('c -> 'b -> 'b)` and supply it to `f a`: ... u (fun (a : 'a) (b : 'b) -> ... f a k ... ) ... -- 2.11.0