From: Jim Pryor Date: Fri, 24 Dec 2010 03:54:35 +0000 (-0500) Subject: ass10 hint tweaks X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=6ce10857443878d3f6899e1ab359a219bf7eb363;ds=sidebyside ass10 hint tweaks Signed-off-by: Jim Pryor --- diff --git a/hints/assignment_10_hint_4.mdwn b/hints/assignment_10_hint_4.mdwn index bb5a7997..ee6f8bc6 100644 --- a/hints/assignment_10_hint_4.mdwn +++ b/hints/assignment_10_hint_4.mdwn @@ -49,12 +49,13 @@ I said earlier, the encapsulation enforced by that library may make it somewhat module TC = T.T(C);; module TS = T.T(S);; module TR = T.T(R);; + let tree = Some (T.Node(T.Leaf '1', T.Node(T.Leaf '2', T.Node(T.Leaf '3', T.Leaf '1'))));; # let v0 = TC.(run_exn (distribute (fun a -> C.(shift (fun k -> k a >>= fun v -> unit (1+v))) ) tree)) (fun a -> 0);; - - : int = 5 + - : int = 4 # let v1 = TC.(run_exn (distribute (fun a -> @@ -69,8 +70,10 @@ I said earlier, the encapsulation enforced by that library may make it somewhat v1 '2';; ~~> 1 *) + # let annotater : char -> ('x, char) S.m = + fun a -> S.(puts (fun s -> (update_env s a)) >> unit a);; # let v2 = TS.(run (distribute annotater tree)) (fun a -> 0);; - # let (tree',env) = v2 in TR.(run (distribute (fun a -> a) tree')) env;; + # let (t, env) = v2 in TR.(run (distribute (fun a -> R.asks (fun e -> e a)) t)) env;; (* returns tree with leafs replaced with their numbers of occurrences *)