anchor.diff:        | ApiSignature.UnionCase _ -> None
   
         | ApiSignature.FullTypeDefinition _ ->
  -        let urlElems, _, _ = nameElementsAndVariableId api
  -        let sb = StringBuilder().Append(urlPart urlElems).Append("?view=").Append(view)
  +        let sb = StringBuilder().Append(printUrlPart api.Signature name).Append("?view=").Append(view)
           Some (string sb)
   
         | ApiSignature.ExtensionMember (member' : Member)
         | ApiSignature.Constructor (_ , (member' : Member))
         | ApiSignature.InstanceMember (_ , (member' : Member))
         | ApiSignature.StaticMember (_ ,(member' : Member)) ->
  -        let urlElems, nameElems, variableMemory = nameElementsAndVariableId api
  -        let sb = StringBuilder().Append(urlPart urlElems).Append("?view=").Append(view).Append("#").Append(hashPart nameElems variableMemory member' api)
  +        let sb = StringBuilder().Append(printUrlPart api.Signature name).Append("?view=").Append(view).Append("#").Append(printHashPart api name member')
           Some (string sb)
   
     module internal FParsec =
  
positive.code: 
      type VariableMemory = Dictionary<string, string>
  
      let variableId (kind: ApiKind) (name: Name) =
        let variableMemory = VariableMemory()
        let memory (prefix: string) (n: NameItem) =
          n.GenericParameters
  
negative.code:             variableMemory.[variable] <- prefix + string variableId
          )
          
        match api.Signature with
        | ApiSignature.FullTypeDefinition _ ->
          name |> List.iter (memory "_")
        | _ ->
          name.Head |> memory "__"
          name.Tail |> List.iter (memory "_")
        variableMemory
  
      type StringJoinContext = private {
        mutable IsFirstElement: bool
        Separator: string
      }
      with
        static member Create(sep) = { IsFirstElement = true; Separator = sep }
        member this.Print(sb: StringBuilder) =
          if this.IsFirstElement then
            this.IsFirstElement <- false
            sb
          else
            sb.Append(this.Separator)
  
      let printName (modifiedString: string) (ctx: StringJoinContext) (mapping: string -> string) (sb: StringBuilder) (name: NameItem) (wroteGeneric: bool) : bool =
        sb.Append(ctx.Print) |> ignore
  
        if not wroteGeneric && not name.GenericParameters.IsEmpty then
          sb.Append(urlName name |> mapping).Append(modifiedString).Append(string name.GenericParameters.Length) |> ignore
          true
        else
          sb.Append(urlName name |> mapping) |> ignore
          wroteGeneric
  
      let printUrlPart (api: ApiSignature) (name: Name) (sb: StringBuilder) : StringBuilder =
        let ctx = StringJoinContext.Create(".")
        let printName' name = List.foldBack (printName "-" ctx toLower sb) name false |> ignore
        match api with
        | ApiSignature.FullTypeDefinition _ ->
          printName' name
        | ApiSignature.Constructor _ ->
          printName' name.Tail
          sb.Append(ctx.Print).Append("-ctor") |> ignore
        | _ ->
          printName' name.Tail
          sb.Append(ctx.Print).Append(urlName name.Head |> toLower) |> ignore
        sb
  
      let rec parameterElement (api: Api) (variableMemory: VariableMemory) (t: LowType) (sb: StringBuilder) : StringBuilder =
        match t with
        | Unit -> sb
        | Type (ActualType { Name = name }) ->
          let ns = name |> List.rev
          sb.AppendJoin("_", ns, (fun n sb -> sb.Append(urlName n)))
        | Array (_, elem) -> sb.Append(parameterElement api variableMemory elem).Append("__")
        | ByRef (_, arg) -> sb.Append(parameterElement api variableMemory arg).Append("_")
  