anchor.diff:      | AllConditionsMet
   
   type EntityTagHeaderValue with
  -    /// **Description**
  -    ///
  -    /// Creates an object of type `EntityTagHeaderValue`.
  -    ///
  -    /// **Parameters**
  -    ///
  -    /// `isWeak`: The difference between a regular (strong) ETag and a weak ETag is that a matching strong ETag guarantees the file is byte-for-byte identical, whereas a matching weak ETag indicates that the content is semantically the same. So if the content of the file changes, the weak ETag should change as well.
  -    /// `eTag`: The entity tag value (without quotes or the `W/` prefix).
  -    ///
  -    /// **Output**
  -    ///
  -    /// Returns an object of `EntityTagHeaderValue`.
  -    ///
  +    /// <summary>
  +    /// Creates an object of type <see cref="EntityTagHeaderValue"/>.
  +    /// </summary>
  +    /// <param name="isWeak">The difference between a regular (strong) ETag and a weak ETag is that a matching strong ETag guarantees the file is byte-for-byte identical, whereas a matching weak ETag indicates that the content is semantically the same. So if the content of the file changes, the weak ETag should change as well.</param>
  +    /// <param name="eTag">The entity tag value (without quotes or the W/ prefix).</param>
  +    /// <returns>Returns an object of <see cref="EntityTagHeaderValue"/>.</returns>
       static member FromString (isWeak : bool) (eTag : string) =
           let eTagValue = sprintf "\"%s\"" eTag
           EntityTagHeaderValue(StringSegment(eTagValue), isWeak)
  
positive.code:                 | true  -> AllConditionsMet
                  | false -> ResourceNotModified
  
      /// **Description**
      ///
      /// Validates the following conditional HTTP headers of the HTTP request:
      ///
      /// `If-Match`
      /// `If-None-Match`
      /// `If-Modified-Since`
      /// `If-Unmodified-Since`
      ///
      /// **Parameters**
      ///
      /// `eTag`: Optional ETag. You can use the static `EntityTagHeaderValue.FromString` helper method to generate a valid `EntityTagHeaderValue` object.
      /// `lastModified`: Optional `DateTimeOffset` object denoting the last modified date.
      ///
      /// **Output**
      ///
      /// Returns a `Precondition` union type, which can have one of the following cases:
      ///
      /// `NoConditionsSpecified`: No validation has taken place, because the client didn't send any conditional HTTP headers.
      /// `ConditionFailed`: At least one condition couldn't be satisfied. It is advised to return a `412` status code back to the client (you can use the `HttpContext.PreconditionFailedResponse()` method for that purpose).
      /// `ResourceNotModified`: The resource hasn't changed since the last visit. The server can skip processing this request and return a `304` status code back to the client (you can use the `HttpContext.NotModifiedResponse()` method for that purpose).
      /// `AllConditionsMet`: All pre-conditions can be satisfied. The server should continue processing the request as normal.
      ///
      member this.ValidatePreconditions (eTag : EntityTagHeaderValue option) (lastModified : DateTimeOffset option) =
          // Parse headers
          let responseHeaders = this.Response.GetTypedHeaders()
  
negative.code: // HttpHandler functions
  // ---------------------------
  
  /// <summary>
  /// Validates the following conditional HTTP headers of the request:
  ///
  /// If-Match
  /// 
  /// If-None-Match
  /// 
  /// If-Modified-Since
  /// 
  /// If-Unmodified-Since
  /// 
  ///
  /// If the conditions are met (or non existent) then it will invoke the next http handler in the pipeline otherwise it will return a 304 Not Modified or 412 Precondition Failed response.
  /// </summary>
  /// <param name="eTag">Optional ETag. You can use the static EntityTagHeaderValue.FromString helper method to generate a valid <see cref="EntityTagHeaderValue"/> object.</param>
  /// <param name="lastModified">Optional <see cref="System.DateTimeOffset"/> object denoting the last modified date.</param>
  /// <param name="next"></param>
  /// <param name="ctx"></param>
  /// <returns>A Giraffe <see cref="HttpHandler" /> function which can be composed into a bigger web application.</returns>
  let validatePreconditions (eTag           : EntityTagHeaderValue option)
                            (lastModified   : DateTimeOffset option) : HttpHandler =
      fun (next : HttpFunc) (ctx : HttpContext) ->
  