anchor.diff:  
   and private RouteShape =
       | Base of ParseFunc // assuming string as LinkFunc
  -    | Object of ctor: (unit -> obj) * name: option<string> * args: RouteObjectArgs
  +    | 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>
   
  
positive.code:     let getDefaultCtor (t: Type) =
          match t with
          | ConcreteType ct ->
              let t = Reflection.LoadType t
              let defaultCtor = Hashed { CtorParameters = [] }
              if comp.GetClassInfo ct.Entity |> Option.exists (fun cls -> cls.Constructors.ContainsKey defaultCtor) 
              then failwithf "Endpoint type must have a default constructor: %s" t.AssemblyQualifiedName
              else Lambda([], Ctor (ct, defaultCtor, [])), t
          // TODO: handle TupleType etc
          | _ -> failwithf "Generic endpoint type not supported for routing: %s" t.AssemblyQualifiedName
  
  
negative.code:                             match Map.tryFind name query with
                              | Some x -> v?(name) <- x; Some rest
                              | None -> None
                          | _ -> failwith "invalid QueryItem enum value"
                  )
                  |> Option.map (fun rest -> (v, rest))
              match shape with
  