anchor.diff:  and IWriteMemberVisitor<'TRecord, 'R> =
       abstract Visit<'Field> : ShapeWriteMember<'TRecord, 'Field> -> 'R
   
  +//-------------------------------
  +// Constructor Shapes
  +
  +type IShapeConstructor =
  +    abstract IsPublic : bool
  +    abstract Arity : int
  +    /// ConstructorInfo instance
  +    abstract ConstructorInfo : ConstructorInfo
  +    // A tuple type encoding all arguments passed to the constuctor
  +    abstract ArgumentsType : Type
  +
  +and IShapeConstructor<'CtorType> =
  +    inherit IShapeConstructor
  +    abstract Accept : IShapeConstructorVisitor<'CtorType, 'R> -> 'R
  +
  +and IShapeConstructorVisitor<'CtorType, 'R> =
  +    abstract Visit<'CtorArgs> : ShapeConstructor<'CtorType, 'CtorArgs> -> 'R
  +
  +and ShapeConstructor<'CtorType, 'CtorArgs> private (ctorInfo : ConstructorInfo, arity : int) =
  +    let valueReader = 
  +        if arity = 0 then fun _ -> [||]
  +        else
  +            FSharpValue.PreComputeTupleReader typeof<'CtorArgs>
  +
  +    member __.Invoke(args : 'CtorArgs) =
  +        let args = valueReader args
  +        ctorInfo.Invoke args :?> 'CtorType
  +
  +    interface IShapeConstructor<'CtorType> with
  +        member __.IsPublic = ctorInfo.IsPublic
  +        member __.Arity = arity
  +        member __.ConstructorInfo = ctorInfo
  +        member __.ArgumentsType = typeof<'CtorArgs>
  +        member __.Accept v = v.Visit __
  +
   [<AutoOpen>]
   module private MemberUtils2 =
       let mkMemberUntyped<'Record> (label : string) (memberInfo : MemberInfo) (path : MemberInfo[]) =
  
positive.code:     abstract Accept : ITypeShapeVisitor<'R> -> 'R
      override s.ToString() = sprintf "TypeShape [%O]" s.Type
  
  [<Sealed>]
  type TypeShape<'T> () =
      inherit TypeShape()
  
negative.code: 
  type IShapePoco =
      abstract IsStruct : bool
      abstract Constructors : IShapeConstructor[]
      abstract Fields : IShapeMember[]
      abstract Properties : IShapeMember[]
      abstract Accept : IPocoVisitor<'R> -> 'R
  
  and ShapePoco<'Poco> private () =
      let isStruct = typeof<'Poco>.IsValueType
      let ctors =
          typeof<'Poco>.GetConstructors(allInstanceMembers)
          |> Array.map (fun c -> mkCtorUntyped<'Poco> c)
  
      let fields = 
          typeof<'Poco>.GetFields(allInstanceMembers)
          |> Array.map (fun f -> mkWriteMemberUntyped<'Poco> f.Name f [|f|])
  