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