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:     | s,a when s = a -> Some s
      | _ -> None
  
  let negotiateCharset serves accepts = 
      if String.IsNullOrEmpty accepts
          then serves
  
negative.code:     List.tryFind isMatch accepts
      |> Option.map ignore
  
  /// <summary>
  /// Matches two language tags
  /// </summary>
  /// <param name="serves"></param>
  /// <param name="accepts"></param>
  let matchLanguage serves accepts =
      match serves,accepts with
      | "*",a -> Some a
  