@callback arguments(args :: list()) :: list()
@callback new(args :: list()) :: Constraint.t()
@callback propagators(args :: list()) :: [atom()]