anchor.diff:    # contains a _type attribute and a list of functions which are used to
     # evaluate this property.  The content attribute is used to stack properties
     # on top of each other.
  -  # 
  +  #
     # The optional functions which may be contained in the property attribute
     # are:
     #  - onDelay: run on a copied property.
  
positive.code:     inherit content;
    };
  
    # Create a "ThenElse" property which contains choices being chosen by
    # the evaluation of an "If" statement.
    isThenElse = attrs: (typeOf attrs) == "then-else";
    mkThenElse = attrs:
      assert attrs ? thenPart && attrs ? elsePart;
      __trace "Obsolete usage of mkThenElse, replace it by mkMerge."
      mkProperty {
        property = {
          _type = "then-else";
          onEval = val: throw "Missing mkIf statement.";
          inherit (attrs) thenPart elsePart;
        };
        content = mkNotdef;
      };
  
    # Create an "Always" property removing/ ignoring all "If" statement.
    isAlways = attrs: (typeOf attrs) == "always";
    mkAlways = value:
      mkProperty {
        property = {
          _type = "always";
          onEval = p@{content, ...}: content;
          inherit value;
        };
        content = mkNotdef;
      };
  
    mkAssert = assertion: message: content:
      mkIf
        (if assertion then true else throw "\nFailed assertion: ${message}")
        content;
  
    # Remove all "If" statement defined on a value.
    rmIf = foldProperty (
        foldFilter isIf
          ({content, ...}: content)
          id
      ) id;
  
    # Evaluate the "If" statements when either "ThenElse" or "Always"
    # statement is encountered.  Otherwise it removes multiple If statements and
  
negative.code:   # property and call the function `nul' on the final value which is not a
    # property.  The stack is traversed in reversed order.  The `op' function
    # should expect a property with a content which have been modified.
    #
    # Warning: The `op' function expects only one argument in order to avoid
    # calls to mkProperties as the argument is already a valid property which
    # contains the result of the folding inside the content attribute.
  