+-spec return(A) ->
+ {ok, A}.
+return(X) ->
+ {ok, X}.
+
+-spec map(t(A, Error), fun((A) -> (B))) ->
+ t(B, Error).
+map({_, _}=T, F) ->
+ map_ok(T, F).
+
+-spec map_ok(t(A, Error), fun((A) -> (B))) ->
+ t(B, Error).
+map_ok({ok, X}, F) ->
+ {ok, F(X)};
+map_ok({error, _}=Error, _) ->
+ Error.
+
+-spec map_error(t(A, B), fun((B) -> (C))) ->
+ t(A, C).
+map_error({ok, _}=Ok, _) ->
+ Ok;
+map_error({error, Reason}, F) ->
+ {error, F(Reason)}.
+
+-spec tag_error(t(A, Reason), Tag) ->
+ t(A, {Tag, Reason}).
+tag_error({ok, _}=Ok, _) ->
+ Ok;
+tag_error({error, Reason}, Tag) ->
+ {error, {Tag, Reason}}.
+