struct   type ('a, 'b) t = {     result: 'a;     more_things_todo: 'b list;   }   let return ?(more_things_todo=[]) result = {result; more_things_todo}   let bind m ~f =     let next = f m.result in     { next with more_things_todo = next.more_things_todo @ m.more_things_todo}   let (>>=) m f = bind m ~f end