@type t() :: %CPSolver.Variable{ domain: Domain.t(), id: reference(), index: integer(), initial_size: integer(), name: term(), propagate_on: Propagator.propagator_event(), store: term() }
@callback new(values :: Enum.t(), opts :: Keyword.t()) :: t()