edits
[lambda.git] / week7.mdwn
index 52bc8eb..ba845b2 100644 (file)
@@ -114,17 +114,17 @@ val unit : 'a -> 'a option = <fun>
 - : int option = Some 2
 </pre>
 
-       The parentheses is the magic for telling Ocaml that the
-       function to be defined (in this case, the name of the function
-       is `*`, pronounced "bind") is an infix operator, so we write
-       `m * f` or `( * ) m f` instead of `* m f`.
+The parentheses is the magic for telling Ocaml that the
+function to be defined (in this case, the name of the function
+is `*`, pronounced "bind") is an infix operator, so we write
+`m * f` or `( * ) m f` instead of `* m f`.
 
 *    Associativity: bind obeys a kind of associativity, like this:
 
-    (m * f) * g == m * (fun x -> f x * g)
+    `(m * f) * g == m * (fun x -> f x * g)`
 
-    If you don't understand why the lambda form is necessary, you need
-    to look again at the type of bind.  This is important.  
+    If you don't understand why the lambda form is necessary (the "fun
+    x" part), you need to look again at the type of bind.
 
     For an illustration of associativity in the option monad:
 
@@ -135,15 +135,15 @@ Some 3 * (fun x -> unit x * unit);;
 - : int option = Some 3
 </pre>
 
-       Of course, associativity must hold for arbitrary functions of
-       type `'a -> M 'a`, where `M` is the monad type.  It's easy to
-       convince yourself that the bind operation for the option monad
-       obeys associativity by dividing the inputs into cases: if `m`
-       matches `None`, both computations will result in `None`; if
-       `m` matches `Some n`, and `f n` evalutes to `None`, then both
-       computations will again result in `None`; and if the value of
-       `f n` matches `Some r`, then both computations will evaluate
-       to `g r`.
+Of course, associativity must hold for arbitrary functions of
+type `'a -> M 'a`, where `M` is the monad type.  It's easy to
+convince yourself that the bind operation for the option monad
+obeys associativity by dividing the inputs into cases: if `m`
+matches `None`, both computations will result in `None`; if
+`m` matches `Some n`, and `f n` evalutes to `None`, then both
+computations will again result in `None`; and if the value of
+`f n` matches `Some r`, then both computations will evaluate
+to `g r`.
 
 *    Right identity: unit is a right identity for bind.  That is, 
      `m * unit == m` for all monad objects `m`.  For instance,
@@ -164,7 +164,7 @@ arguments of a monoid operation) the two arguments of the bind are of
 different types.  But if we generalize bind so that both arguments are
 of type `'a -> M 'a`, then we get plain identity laws and
 associativity laws, and the monad laws are exactly like the monoid
-laws (see <http://www.haskell.org/haskellwiki/Monad_Laws>).
+laws (see <http://www.haskell.org/haskellwiki/Monad_Laws>, near the bottom).
 
 
 Monad outlook
@@ -191,8 +191,11 @@ intensionality](http://parles.upf.es/glif/pub/sub11/individual/bena_wint.pdf),
 though without explicitly using monads.
 
 All of the code in the discussion below can be found here: [[intensionality-monad.ml]].
-To run it, download the file, start Ocaml, and say `# #use
-"intensionality-monad.ml";;`. 
+To run it, download the file, start Ocaml, and say 
+
+    # #use "intensionality-monad.ml";;
+
+Note the extra `#` attached to the directive `use`.
 
 Here's the idea: since people can have different attitudes towards
 different propositions that happen to have the same truth value, we