action() :: term()
args() :: list()
state() :: term()
t() :: term()
invoke(action(), args(), state()) :: {term(), state()}