X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=towards_monads.mdwn;h=acdfbb3304a0627ab2f33a743c68811c544f2489;hp=3671d2730cf38bb5639032ce7a25920787ff53d8;hb=4227828f80f4c9c05f10bfc14435747c31fbb934;hpb=34c70399625b1a258682e542622d3c26d3b3795a diff --git a/towards_monads.mdwn b/towards_monads.mdwn index 3671d273..acdfbb33 100644 --- a/towards_monads.mdwn +++ b/towards_monads.mdwn @@ -48,13 +48,13 @@ the output of the safe-division function as input for further division operations. So we have to jack up the types of the inputs:
-let div' (x:int option) (y:int option) =
-  match y with
+let div' (u:int option) (v:int option) =
+  match v with
 	  None -> None
     | Some 0 -> None
-	| Some n -> (match x with
+	| Some y -> (match u with
 					  None -> None
-                    | Some m -> Some (m / n));;
+                    | Some x -> Some (x / y));;
 
 (*
 val div' : int option -> int option -> int option = 
@@ -74,12 +74,12 @@ I prefer to line up the `match` alternatives by using OCaml's
 built-in tuple type:
 
 
-let div' (x:int option) (y:int option) =
-  match (x, y) with
+let div' (u:int option) (v:int option) =
+  match (u, v) with
 	  (None, _) -> None
     | (_, None) -> None
     | (_, Some 0) -> None
-	| (Some m, Some n) -> Some (m / n);;
+	| (Some x, Some y) -> Some (x / y);;
 
So far so good. But what if we want to combine division with @@ -88,11 +88,11 @@ aware of the possibility that one of their arguments will trigger a presupposition failure:
-let add' (x:int option) (y:int option) =
-  match (x, y) with
+let add' (u:int option) (v:int option) =
+  match (u, v) with
 	  (None, _) -> None
     | (_, None) -> None
-    | (Some m, Some n) -> Some (m + n);;
+    | (Some x, Some y) -> Some (x + y);;
 
 (*
 val add' : int option -> int option -> int option = 
@@ -112,16 +112,16 @@ Haskell, etc., is to define a `bind` operator (the name `bind` is not
 well chosen to resonate with linguists, but what can you do). To continue our mnemonic association, we'll put a `'` after the name "bind" as well.
 
 
-let bind' (x: int option) (f: int -> (int option)) =
-  match x with
+let bind' (u: int option) (f: int -> (int option)) =
+  match u with
 	  None -> None
-    | Some n -> f n;;
+    | Some x -> f x;;
 
-let add' (x: int option) (y: int option)  =
-  bind' x (fun x -> bind' y (fun y -> Some (x + y)));;
+let add' (u: int option) (v: int option)  =
+  bind' u (fun x -> bind' v (fun y -> Some (x + y)));;
 
-let div' (x: int option) (y: int option) =
-  bind' x (fun x -> bind' y (fun y -> if (0 = y) then None else Some (x / y)));;
+let div' (u: int option) (v: int option) =
+  bind' u (fun x -> bind' v (fun y -> if (0 = y) then None else Some (x / y)));;
 
 (*
 #  div' (div' (Some 12) (Some 2)) (Some 4);;