internal Not(ASpec <T> spec)
 {
     Inner = spec ?? throw new ArgumentNullException("spec");
 }
 internal Or(ASpec <T> spec1, ASpec <T> spec2)
 {
     Spec1 = spec1 ?? throw new ArgumentNullException("spec1");
     Spec2 = spec2 ?? throw new ArgumentNullException("spec2");
 }