adamc@841: datatype t = datatype Basis.option adamc@841: adamc@846: fun eq [a] (_ : eq a) = adamc@846: mkEq (fn x y => adamc@846: case (x, y) of adamc@846: (None, None) => True adamc@846: | (Some x, Some y) => x = y adamc@846: | _ => False) adamc@846: adamc@944: fun isNone [a] x = adamc@944: case x of adamc@944: None => True adamc@944: | Some _ => False adamc@944: adamc@841: fun isSome [a] x = adamc@841: case x of adamc@841: None => False adamc@841: | Some _ => True adamc@844: adamc@844: fun mp [a] [b] f x = adamc@844: case x of adamc@844: None => None adamc@844: | Some y => Some (f y) adamc@846: adamc@846: fun bind [a] [b] f x = adamc@846: case x of adamc@846: None => None adamc@846: | Some y => f y