anchor.diff:    let structTuple self typeParser =
       let elems = attempt self <|> typeParser
       parse {
  +      let! begin' = getIndex
         do! skipChar '('
         let! xs = sepBy2 (trim elems) (skipChar ',')
         do! skipChar ')'
  -      let range = { Begin = minBeginRange xs; End = maxEndRange xs }
  +      let! end' = getIndex
  +      let range = { Begin = begin'; End = end' }
         return Tuple ({ Elements = xs; IsStruct = true }, atQuery range)
       }
   
  
positive.code: 
    let ptype =
      choice [
        attempt (between (skipChar '(') (skipChar ')') (trim fsharpSignature))
        attempt dotNetGeneric
        attempt userInputType
        attempt variable
  
negative.code: 
  let parray =
    between (pchar '[') (pchar ']') (manyChars (pchar ',')) |>> fun x -> "[" + x + "]"
  
  let updatePosition p x = LowType.setPosition (fun _ -> p) x
  
  let inParen p = parse {
    let! begin' = getIndex
    do! skipChar '('
    let! x = p
    do! skipChar ')'
    let! end' = getIndex
    return updatePosition (atQuery { Begin = begin'; End = end' }) x
  }
  
  module FSharp =
    let struct' = "struct"
  