anchor.diff:  
     let ptype =
       choice [
  -      attempt (between (skipChar '(') (skipChar ')') (trim fsharpSignature))
  +      attempt (inParen (trim fsharpSignature))
         attempt dotNetGeneric
         attempt userInputType
         attempt variable
  
positive.code:   let structTuple self typeParser =
      let elems = attempt self <|> typeParser
      parse {
        do! skipChar '('
        let! xs = sepBy2 (trim elems) (skipChar ',')
        do! skipChar ')'
        let range = { Begin = minBeginRange xs; End = maxEndRange xs }
        return Tuple ({ Elements = xs; IsStruct = true }, atQuery range)
      }
  
  
negative.code:     }
  
    let arrow _ typeParser =
      let argsWithoutParen =
        sepBy1 (trim typeParser) (pstring ",")
        |>> function
          | [ x ] -> x
          | xs -> Tuple ({ Elements = xs; IsStruct = false }, atQuery { Begin = minBeginRange xs; End = maxEndRange xs })
  
      let argsWithParen = inParen argsWithoutParen
  
      let arg = attempt argsWithParen <|> argsWithoutParen
      sepBy2 (trim arg) (pstring "->")
      |>> (fun xs ->
        let arrow = Arrow.ofLowTypeList xs
        let range = { Begin = minBeginRange xs; End = maxEndRange xs }
  