A type of thing that needs to exists in order for a Wme to activate part of a condition
fields() :: [type: type(), variable: variable()]
t() :: %Retex.Fact.Isa{type: type(), variable: variable()}
type() :: String.t() | atom()
variable() :: String.t()
new(fields()) :: t()