val (>>=) : ( 'a, 'e ) t -> ( 'a0 -> ( 'b, 'e0 ) t ) -> ( 'b0, 'e1 ) tval (>>|) : ( 'a, 'e ) t -> ( 'a0 -> 'b ) -> ( 'b0, 'e0 ) tval return : 'a -> ( 'a0, 'e ) tval bind : ( 'a, 'e ) t -> f:( 'a0 -> ( 'b, 'e0 ) t ) -> ( 'b0, 'e1 ) tval map : ( 'a, 'e ) t -> f:( 'a0 -> 'b ) -> ( 'b0, 'e0 ) tval both : ( 'a, 'e ) t -> ( 'b, 'e0 ) t -> ( 'a0 * 'b0, 'e1 ) t