anchor.diff:                  | _ -> MetaBase parseMeth
           | ArrayType (t, 1) ->
               MetaSequence((let x = Id.New() in Lambda([x], Var x)), t)
  +        | TupleType ts ->
  +            MetaTuple ts
           | t -> failwithf "Type not supported by RouteMap: %s" t.AssemblyQualifiedName
   
       let routeShapeT = concrete(Reflection.getTypeDefinition typeof<RouteShape>, [])
  
positive.code:     | Base of ParseFunc // assuming string as LinkFunc
      | Object of ctor: (unit -> obj) * name: option<string> * args: RouteObjectArgs
      | Sequence of fromArray: (array<obj> -> obj) * parseItem: ParseFunc * linkItem: LinkFunc
  //    | Tuple of items: array<ParseFunc * LinkFunc>
  
  and private MetaRootShape =
      | MetaBase of parse: Method
      | MetaObject of ctor: Expression * name: option<string> * args: list<string * System.Type>
      | MetaSequence of fromArray: Expression * item: Type
  //    | MetaTuple of items: list<System.Type>
  
  and private RouteMapBuilderMacro(comp: Metadata.Compilation) =
      inherit Macro()
  
negative.code:             let parseArgs (init: unit -> obj) (rest: list<string>) (args: RouteObjectArgs) =
                  let v = init()
                  (Some rest, args)
                  ||> Array.fold (fun rest (name, parse, _) ->
                      match rest with
                      | None -> None
                      | Some rest ->
  