anchor.diff:  with lib.lists;
   with lib.types;
   with lib.attrsets;
  +with lib.strings;
   with (import ./inspect.nix { inherit lib; }).predicates;
   
   let
  
positive.code:         else if isDarwin  parsed then vendors.apple
          else if isWindows parsed then vendors.pc
          else                     vendors.unknown;
        kernel = getKernel args.kernel;
        abi =
          /**/ if args ? abi       then getAbi args.abi
          else if isLinux   parsed then
  
negative.code:         then { cpu = elemAt l 0;                      kernel = elemAt l 1; abi = elemAt l 2; }
        else if (elemAt l 2 == "mingw32") # autotools breaks on -gnu for window
          then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows";  abi = "gnu"; }
        else if hasPrefix "netbsd" (elemAt l 2)
          then { cpu = elemAt l 0; vendor = elemAt l 1;    kernel = elemAt l 2;                }
        else throw "Target specification with 3 components is ambiguous";
      "4" =    { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; };
    }.${toString (length l)}
  