@spec derive( {:error, any(), any()} | {:ok, any(), [binary()]} | {:error, any(), any(), :halt} | {:error, any(), :nested, list(), any(), [binary()]} ) :: {:ok, map()} | {:error, any(), any()}
@spec derive({:ok, any(), [String.t()]}, list()) :: {:ok, map()} | {:error, :bad_parameters, list()}
@spec error_handler(map(), [any()]) :: {:error, :bad_parameters, any()}