anchor.diff:    # Otherwise, the property is kept on all sub-attribute definitions.
     onOverrideDelay = name: p@{property, content, ...}:
       let inherit (property) template; in
  -    if builtins.isAttrs template && template != {} then
  -      if builtins.hasAttr name template then
  +    if isAttrs template && template != {} then
  +      if hasAttr name template then
           p // {
             property = p.property // {
               template = builtins.getAttr name template;
  
positive.code:   mergeEnableOption = mergeTypedOption "boolean"
      (x: true == x || false == x) (fold lib.or false);
  
    mergeListOption = mergeTypedOption "list"
      __isList concatLists;
  
    mergeStringOption = mergeTypedOption "string"
      (x: if builtins ? isString then builtins.isString x else x + "")
      lib.concatStrings;
  
    mergeOneOption = list:
      if list == [] then abort "This case should never happens."
      else if tail list != [] then throw "Multiple definitions. Only one is allowed for this option."
      else head list;
  
  
negative.code:           if typeOf defValue == "option"
            then
              # `defValue' is an option.
              if hasAttr defName opts
              then builtins.getAttr defName opts
              else defValue.default
            else
              # `defValue' is an attribute set containing options.
              # So recurse.
              if hasAttr defName opts && isAttrs optValue 
              then addDefaultOptionValues defValue optValue
              else addDefaultOptionValues defValue {};
        }
      ) (attrNames defs));
  
    mergeDefaultOption = list:
      if list != [] && tail list == [] then head list
      else if all builtins.isFunction list then x: mergeDefaultOption (map (f: f x) list)
      else if all isList list then concatLists list
      else if all isAttrs list then fold lib.mergeAttrs {} list
      else if all (x: true == x || false == x) list then fold lib.or false list
      else if all (x: x == toString x) list then lib.concatStrings list
      else throw "Cannot merge values.";
  