All the types that implement this protocol.
@type args() :: map()
@type context() :: map()
@type error_response() :: {:error, atom()} | {:error, atom(), String.t()}
@type everything() :: {any(), persona(), parent(), field(), context(), args()}
@type field() :: atom()
@type parent() :: any()
@type persona() :: struct() | nil
@type response() :: :ok | {:ok, any()} | error_response()
@type t() :: term()
@spec before(any(), persona(), parent(), field(), context(), args()) :: everything()
@spec can?(any(), persona(), parent(), field(), context(), args()) :: response()