diff lib/ur/option.ur @ 846:0d30e6338c65

Some standard library reorgs and additions; handle mutual datatypes better in Specialize
author Adam Chlipala <adamc@hcoop.net>
date Tue, 09 Jun 2009 18:11:59 -0400
parents 74a1e3bdf430
children da3ec6014d2f
line wrap: on
line diff
--- a/lib/ur/option.ur	Tue Jun 09 11:12:34 2009 -0400
+++ b/lib/ur/option.ur	Tue Jun 09 18:11:59 2009 -0400
@@ -1,5 +1,12 @@
 datatype t = datatype Basis.option
 
+fun eq [a] (_ : eq a) =
+    mkEq (fn x y =>
+             case (x, y) of
+                 (None, None) => True
+               | (Some x, Some y) => x = y
+               | _ => False)
+
 fun isSome [a] x =
     case x of
         None => False
@@ -9,3 +16,8 @@
     case x of
         None => None
       | Some y => Some (f y)
+
+fun bind [a] [b] f x =
+    case x of
+        None => None
+      | Some y => f y