type 'a intension = s -> 'a;;
let unit x (w:s) = x;;
let bind m f (w:s) = f (m w) w;;
-let lift f u v = bind u (fun x -> bind v (fun y -> f x y));;
+let lift2' f u v = bind u (fun x -> bind v (fun y -> f x y));;
bind (unit ann) left 1;;
bind (unit cam) left 2;;
-lift saw (unit bill) (unit ann) 1;;
-lift saw (unit bill) (unit ann) 2;;
+lift2' saw (unit bill) (unit ann) 1;;
+lift2' saw (unit bill) (unit ann) 2;;
let thinks (p:s->t) (x:e) (w:s) =
match (x, p 2) with ('a', false) -> false | _ -> p w;;