public static ICompositeSpec <T?> And <T>(this ICompositeSpec <T?> leftSpec, ICompositeSpec <T> rightSpec) where T : struct =>
public static ICompositeSpec <T> And <T>(this ICompositeSpec <T> leftSpec, ICompositeSpec <T> rightSpec) => new CompositeSpec <T>(new AndSpecNode <T>(leftSpec, rightSpec));
public static ICompositeSpec <T> And <T>(this ICompositeSpec <T> leftSpec, ICompositeSpec <T?> rightSpec) where T : struct => new CompositeSpec <T>(new AndSpecNode <T>(leftSpec, rightSpec.Replace <T?, T>(v => (T?)v)));
public SpecConclusion(IMemberNode <TRoot, T> memberNode, ICompositeSpec <T> spec, ISpecNodeMapBuilder specNodeMapBuilder) => (_memberNode, _spec, _specNodeMapBuilder) = (memberNode, spec, specNodeMapBuilder);