anchor.diff:      .Append(">")
   and printArrowItem isDebug printTypeInfo (item: LowType) (p: SignaturePrinter<_>) =
     match item with
  -  | Arrow _ as a ->
  -    p.Append("(")
  -      .Append(printLowType isDebug printTypeInfo a)
  -      .Append(")")
  -  | x -> p.Append(printLowType isDebug printTypeInfo x)
  +  | Arrow _ -> p.Append(printLowTypeWithParen isDebug printTypeInfo item)
  +  | _ -> p.Append(printLowType isDebug printTypeInfo item)
   and printArrow isDebug printTypeInfo (arrow: Arrow) (p: SignaturePrinter<_>) =
     let ps, ret = arrow
     p.AppendJoin(" -> ", ps, printArrowItem isDebug printTypeInfo).Append(" -> ").Append(printArrowItem isDebug printTypeInfo ret)
   and printTuple isDebug printTypeInfo (xs: _ list) (p: SignaturePrinter<_>) =
     let printItem lowType (p: SignaturePrinter<_>) =
       match lowType with
  -    | Tuple _ as t ->
  -      p.Append("(")
  -        .Append(printLowType isDebug printTypeInfo t)
  -        .Append(")")
  -    | x -> p.Append(printLowType isDebug printTypeInfo x)
  +    | Tuple _ -> p.Append(printLowTypeWithParen isDebug printTypeInfo lowType)
  +    | _ -> p.Append(printLowType isDebug printTypeInfo lowType)
     p.AppendJoin(" * ", xs, printItem)
   and printStructTuple isDebug printTypeInfo (xs: _ list) (p: SignaturePrinter<_>) =
     let printItem lowType (p: SignaturePrinter<_>) =
       match lowType with
  -    | Tuple ({ IsStruct = false  }, _) | Arrow _ ->
  -      p.Append("(")
  -        .Append(printLowType isDebug printTypeInfo lowType)
  -        .Append(")")
  +    | Tuple ({ IsStruct = false  }, _) | Arrow _ -> p.Append(printLowTypeWithParen isDebug printTypeInfo lowType)
       | _ -> p.Append(printLowType isDebug printTypeInfo lowType)
     p.Append("struct (")
       .AppendJoin(" * ", xs, printItem)
  
positive.code: 
    match param with
    | { Type = Tuple _ } when tupleParen || hasName ->
      p.Append("(")
        .Append(printLowType_short isDebug param.Type)
        .Append(")")
    | { Type = Arrow _ } ->
      p.Append("(")
        .Append(printLowType_short isDebug param.Type)
        .Append(")")
    | _ -> p.Append(printLowType_short isDebug param.Type)
  
  let printParameterGroups tupleParen isDebug (pg: ParameterGroups) (p: SignaturePrinter<_>) =
  
negative.code:     .Append(")")
  
  let printLowType_short isDebug t (p: SignaturePrinter<_>) = p.Append(printLowType isDebug printTypeInfo_short t)
  let printLowTypeWithParen_short isDebug t (p: SignaturePrinter<_>) = p.Append(printLowTypeWithParen isDebug printTypeInfo_short t)
  let printLowType_full isDebug t (p: SignaturePrinter<_>) = p.Append(printLowType isDebug printTypeInfo_full t)
  
  let printParameter tupleParen isDebug (param: Parameter) (p: SignaturePrinter<_>) =
  