private static Func<IEnumerable<SpecificationProperty>, IEnumerable<Maybe<Error>>> EnforceMutuallyExclusiveSet()
{
return specProps =>
{
var options = specProps.Where(sp => sp.Specification.IsOption() && sp.Value.IsJust());
var groups = options.GroupBy(g => ((OptionSpecification)g.Specification).SetName);
if (groups.Count() > 1)
{
return options.Select(s => Maybe.Just<Error>(new MutuallyExclusiveSetError(NameInfo.FromOptionSpecification((OptionSpecification)s.Specification))));
}
return Enumerable.Empty<Nothing<Error>>();
};
}