key() :: String.t() | atom() | integer() | function()
keys() :: [key()] | key()
t() :: %{header: [{String.t(), keys()}], length: [{keys(), integer()}] | nil}
expends(t()) :: [{String.t(), keys()}]
match_keys?([key()], [key()]) :: boolean()