From: Jim Pryor Date: Mon, 1 Nov 2010 04:22:27 +0000 (-0400) Subject: towards monads: use u,v for monadic terms X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=4227828f80f4c9c05f10bfc14435747c31fbb934 towards monads: use u,v for monadic terms Signed-off-by: Jim Pryor --- 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);;