struct
type +'a m = 'a
external return : 'a -> 'a m = "%identity"
let bind f m = f m
let bind_rev m f = f m
let error = raise
let catch func handler = try func () with | e -> handler e
end