static public IBindingBuilder <TModel, TView, TCreated, TBindingCollection> Create <TModel, TView, TCreator, TCreated, TBindingCollection>(
     this IBindingBuilder <TModel, TView, TCreator, TBindingCollection> binding)
     where TCreator : ICreator <TCreated>
     where TCreated : class
 {
     return(binding.Select(c => c?.Create()));
 }
 static public IBindingBuilder <TModel, TView, TLoadedValue, TBindingCollection> Load <TModel, TView, TLoadedValue, TBindingCollection>(
     this IBindingBuilder <TModel, TView, FilePath, TBindingCollection> builder,
     Func <ILoadFormat <TLoadedValue> > loadFormatProvider)
 {
     return(builder.Select((mv, m, v) => SafeLoad(mv, stream =>
     {
         ILoadFormat <TLoadedValue> serializationFormat = loadFormatProvider();
         return serializationFormat.Load(stream);
     })));
 }
 static public IBindingBuilder <TModel, TView, TLoadedValue, TBindingCollection> Load <TModel, TView, TLoadedValue, TBindingCollection>(
     this IBindingBuilder <TModel, TView, FilePath, TBindingCollection> builder,
     Func <ISerializationFormat <TLoadedValue> > serializationFormatProvider)
     where TModel : IGlyphData
 {
     return(builder.Select((mv, m, v) => SafeLoad(mv, stream =>
     {
         ISerializationFormat <TLoadedValue> serializationFormat = serializationFormatProvider();
         serializationFormat.KnownTypes = m.SerializationKnownTypes;
         return serializationFormat.Load(stream);
     })));
 }
 static public IBindingBuilder <TModel, TView, TConvertedValue, TBindingCollection> Select <TModel, TView, TModelValue, TConvertedValue, TBindingCollection>(
     this IBindingBuilder <TModel, TView, TModelValue, TBindingCollection> builder,
     Func <TModelValue, TConvertedValue> converter)
 {
     return(builder.Select((mv, m, v) => converter(mv)));
 }