anchor.diff:      let tagReader = FSharpValue.PreComputeUnionTagReader(typeof<'U>, allMembers)
       let caseNames = ucis |> Array.map (fun u -> u.CaseInfo.Name)
   
  +    /// Case shapes for given union type
       member __.UnionCases = ucis
  -    member __.GetTag (union : 'U) = tagReader union
  -    member __.GetTag (caseName : string) =
  +    /// Gets the underlying tag id for given union instance
  +    member __.GetTag (union : 'U) : int = tagReader union
  +    /// Gets the underlying tag id for given union case name
  +    member __.GetTag (caseName : string) : int =
           let caseNames = caseNames
           let n = caseNames.Length
           let mutable i = 0
  
positive.code:             |> Some
          else None
  
      let (|Collection|_|) (s : TypeShape) =
          match s.Type.GetInterface("ICollection`1") with
          | null ->
  
negative.code:             :?> IShapeDefaultConstructor
              |> Some
  
      /// Recognizes shapes that are instances of System.Collections.Generic.KeyValuePair<_,_>
      let (|KeyValuePair|_|) (s : TypeShape) =
          match s.ShapeInfo with
          | Generic(td,ta) when td = typedefof<KeyValuePair<_,_>> ->
  