anchor.diff:      /// <param name="ms">
       ///     The multiset to convert.
       /// </param>
  +    /// <typeparam name="item">
  +    ///     The type of items in the multiset.
  +    /// </typeparam>
       /// <returns>
       ///     The sorted, flattened sequence.
       /// </returns>
  -    let toFlatSeq (MSet ms) =
  +    let toFlatSeq (MSet ms : Multiset<'item>) : 'item seq =
  +        // TODO(CaptainHayashi): this will be removed when itviews land.
           ms
           |> Map.toSeq
           |> Seq.map (fun (k, amount) -> Seq.replicate amount k)
  
positive.code:     /// <param name="ms">
      ///     The multiset to convert.
      /// </param>
      /// <returns>
      ///     The set of items in the multiset.
      /// </returns>
      let toSet (MSet ms) =
          Map.fold (fun set k _ -> Set.add k set) Set.empty ms
  
      (*
  
negative.code:     ///     Since multisets are ordered, mapping can change the position of
      ///     items.
      /// </remarks>
      /// <param name="f">The function to map over the multiset.</param>
      /// <typeparam name="src">
      ///     The type of variables in the list to map.
      /// </typeparam>
      /// <typeparam name="dst">
      ///     The type of variables in the list after mapping.
      /// </typeparam>
      /// <returns>
      ///     The result of mapping <c>f</c> over the multiset.
      /// </returns>
      let map (f : 'src -> 'dst)
              (MSet xs : Multiset<'src>)
              : Multiset<'dst> =
          let rec repeat_add map k n =
              match n with
              | 0 -> map
  