anchor.diff:        else if a == [] then true
         else eqStrict (head a) (head b) && eqListStrict (tail a) (tail b);
       in
  -    if isList a && isList b then eqListStrict a b
  -    else if isAttrs a && isAttrs b then
  -      (eqListStrict (attrNames a) (attrNames b))
  -      && (eqListStrict (lib.attrValues a) (lib.attrValues b))
  -    else a == b; # FIXME !
  +    if nixType a != nixType b then false
  +      else if isList a then eqListStrict a b
  +        else if isAttrs a then
  +          (eqListStrict (attrNames a) (attrNames b))
  +          && (eqListStrict (lib.attrValues a) (lib.attrValues b))
  +        else a == b; # FIXME !
   }
  
positive.code:       ["flags" "cfg" "mergeAttrBy" ];
  
  
    # deep, strict equality testing. This should be implemented as primop
    eqStrict = a : b :
      let eqListStrict = a : b :
  
negative.code: let lib = import ./default.nix;
      inherit (builtins) isFunction hasAttr getAttr head tail isList isAttrs isInt attrNames;
  
  in
  
  