config() :: {init, fun((prx:task()) -> {ok, prx:task()} | {error, prx:posix()})} | {terminate, fun((prx:task(), prx:task()) -> any())}.
op() :: {function(), list()} | {module(), function(), list()} | {module(), function(), list(), [option()]}.
option() :: state | errexit | {state, boolean()} | {errexit, boolean()} | {transform, fun((any()) -> ok | {ok, State :: any()} | {error, prx:posix()})}.
do(prx:task(), [op() | [op()]], any()) -> {ok, prx:task()} | {error, prx:posix()}.
do(prx:task(), [op() | [op()]], any(), [config()]) -> {ok, prx:task()} | {error, prx:posix()}.
with(prx:task(), [op() | [op()]], any()) -> ok | {error, any()} | {badop, {module(), function(), list()}, [op()]} | {badarg, any()}.