From 20c3705983ac428fecca3a33b472431371e6b347 Mon Sep 17 00:00:00 2001
From: jim
Date: Wed, 8 Apr 2015 00:02:14 -0400
Subject: [PATCH] consistent vars, some paren spacing
---
topics/week9_monad_transformers.mdwn | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/topics/week9_monad_transformers.mdwn b/topics/week9_monad_transformers.mdwn
index b0190430..68ea563c 100644
--- a/topics/week9_monad_transformers.mdwn
+++ b/topics/week9_monad_transformers.mdwn
@@ -155,12 +155,12 @@ Here's an example wrapping Option around List, and vice versa:
# module LO = Monad.List.T(Monad.Option);;
# module OL = Monad.Option.P(Monad.List);; (* we use the `.P` transformer to hoist List's ++ operation *)
- # OL.(run (mzero ++ mid 20 >>= fun i -> mid (i+10)));;
+ # OL.(run (mzero ++ mid 20 >>= fun x -> mid (x+10) ));;
- : int OL.result = [Some 30]
When List is on the inside, the failed results just got dropped and the computation proceeds without them.
- # LO.(run (hoist Monad.Option.mzero ++ mid 20 >>= fun i -> mid (i+10)));;
+ # LO.(run (hoist Monad.Option.mzero ++ mid 20 >>= fun x -> mid (x+10) ));;
- : int LO.result = None
On the other hand, when Option is on the inside, as in LO, failures (which we again represent by `mzero`s from the Option monad, not the List monad's own `mzero`; but here since it's the inner monad we need to `hoist Monad.Option.mzero`) abort the whole computation. (If you instead used the List monad's `mzero`, it'd be ignored by `++` and you'd end with just `Some [30]`.)
@@ -171,7 +171,7 @@ This is fun. Notice the difference it makes whether the second `++` is native to
# LL.(run(mid 1 ++ mid 2 >>= fun x -> mid x ++ mid (10*x) ));;
- : int LL.result = \[[1; 10; 2; 20]]
- # LL.(run(mid 1 ++ mid 2 >>= fun x -> hoist Monad.List.(mid x ++ mid (10*x) )));;
+ # LL.(run(mid 1 ++ mid 2 >>= fun x -> hoist Monad.List.(mid x ++ mid (10*x)) ));;
- : int LL.result = [[1; 2]; [1; 20]; [10; 2]; [10; 20]]