public OrSpecification <TInput> Or(BaseSpecification <TInput> specification) => new OrSpecification <TInput>(this, specification);
public AndSpecification(BaseSpecification <T> left, BaseSpecification <T> right) { _left = left; _right = right; }
public AndSpecification <TInput> And(BaseSpecification <TInput> specification) => new AndSpecification <TInput>(this, specification);
public NotSpecification(BaseSpecification <T> main) => _main = main;