sig type 'a t = 'a val return : 'a -> 'a t val fail : exn -> 'a t val bind : 'a t -> ('a -> 'b t) -> 'b t val catch : (unit -> 'a t) -> (exn -> 'a t) -> 'a t end