anchor.diff:              then None
               else Some serves
   
  +/// <summary>
  +/// Intersects accepted and served languages. 
  +/// Returns a list of viable languages, sorted by client preference in descending order
  +/// </summary>
  +/// <param name="x"></param>
   let negotiateLanguage x = negotiate matchLanguage x
  +
  +/// <summary>
  +/// Intersects accepted and served media.
  +/// Returns the preferred viable language, or <c>None</c>.
  +/// </summary>
  +/// <param name="x"></param>
   let bestLanguage x = bestOf negotiateLanguage x
   
  +/// <summary>
  +/// Matches two charset tags
  +/// </summary>
  +/// <param name="serves"></param>
  +/// <param name="accepts"></param>
   let matchCharset serves accepts =
       match serves,accepts with
       | "*",a -> Some a
  
positive.code: /// <param name="accepts">Accept header</param>
  let negotiateMediaType x = negotiate matchMediaType x
  
  let bestOf negotiate serves accepts =
      negotiate serves accepts |> List.tryFind (fun _ -> true)
  
  
negative.code:     let r = accepts >>= fun a -> serves >>= fun m -> matcher m a |> Seq.singleton
      Seq.choose id r |> Seq.distinct |> Seq.toList
  
  /// <summary>
  /// Filters and maps a list of served items and a Accept-* header of acceptable items using a matcher function
  /// </summary>
  /// <param name="matcher"></param>
  /// <param name="serves"></param>
  /// <param name="accepts"></param>
  let negotiate matcher serves accepts =
      negotiateList matcher serves (parseFilterSortAccept accepts)
  
  