anchor.diff:        getSubModules = elemType.getSubModules;
         substSubModules = m: nullOr (elemType.substSubModules m);
         functor = (defaultFunctor name) // { wrapped = elemType; };
  +      nestedTypes.elemType = elemType;
       };
   
       functionTo = elemType: mkOptionType {
  
positive.code:         substSubModules = m: submoduleWith (attrs // {
            modules = m;
          });
          functor = defaultFunctor name // {
            type = types.submoduleWith;
            payload = {
  
negative.code:     , # The deprecation message to display when this type is used by an option
        # If null, the type isn't deprecated
        deprecationMessage ? null
      , # The types that occur in the definition of this type. This is used to
        # issue deprecation warnings recursively. Can also be used to reuse
        # nested types
        nestedTypes ? {}
      }:
      { _type = "option-type";
        inherit name check merge emptyValue getSubOptions getSubModules substSubModules typeMerge functor deprecationMessage nestedTypes;
        description = if description == null then name else description;
      };
  
  