anchor.diff:      let
         toClosureList = file: parentKey: imap (n: x:
           if isAttrs x || isFunction x then
  -          unifyModuleSyntax file "${parentKey}:anon-${toString n}" (applyIfFunction x args)
  +          unifyModuleSyntax file "${parentKey}:anon-${toString n}" (unpackSubmodule applyIfFunction x args)
           else
             unifyModuleSyntax (toString x) (toString x) (applyIfFunction (import x) args));
       in
  
positive.code:     in f (extraArgs // arg)
    else
      f;
  
    /* Merge a list of modules.  This will recurse over the option
       declarations in all modules, combining them into a single set.
  
negative.code: 
    applyIfFunction = f: arg@{ config, options, lib }: if isFunction f then
      let
        # Module arguments are resolved in a strict manner when attribute set
        # deconstruction is used.  As the arguments are now defined with the
        # config.__interanl.args option, the strictness used on the attribute
        # set argument would cause an infinite loop, if the result of the
        # option is given as argument.
        #
        # To work-around the strictness issue on the deconstruction of the
        # attributes set argument, we create a new attribute set which is
        # constructed to satisfy the expected set of attributes.  Thus calling
        # a module will resolve strictly the attributes used as argument but
        # not their values.  The values are forwarding the result of the
        # evaluation of the option.
        requiredArgs = builtins.attrNames (builtins.functionArgs f);
        extraArgs = builtins.listToAttrs (map (name: {
          inherit name;
  