anchor.diff:          |> Array.map (fun p -> mkMemberUntyped<'Poco> p.Name p [|p|])
   
       member __.IsStruct = isStruct
  -    member inline __.CreateUninitialized() = FormatterServices.GetUninitializedObject(typeof<'Poco>) :?> 'Poco
  +    member inline __.CreateUninitialized() = 
  +        FormatterServices.GetUninitializedObject(typeof<'Poco>) :?> 'Poco
  +
  +    member __.Constructors = ctors
       member __.Fields = fields
       member __.Properties = properties
   
       interface IShapePoco with
  +        member __.Constructors = ctors |> Array.map (fun c -> c :> _)
           member __.Fields = fields |> Array.map (fun f -> f :> _)
  -        member __.Properties = properties |> Array.map (fun f -> f :> _)
  +        member __.Properties = properties |> Array.map (fun p -> p :> _)
           member __.IsStruct = isStruct
           member __.Accept v = v.Visit __
   
  
positive.code: [<RequireQualifiedAccess>]
  module Shape =
  
      let private SomeU = Some() // avoid allocating this all the time
      let inline private test<'T> (s : TypeShape) =
          match s with
          | :? TypeShape<'T> -> SomeU
  
negative.code:     | Array of element:Type * rank:int
      | Generic of definition:Type * args:Type []
  
  /// Used to extract the type variable contained in a specific shape
  type ITypeShapeVisitor<'R> =
      abstract Visit<'T> : unit -> 'R
  
  /// Encapsulates a type variable that can be accessed using type shape visitors
  [<AbstractClass>]
  type TypeShape =
      [<CompilerMessage("TypeShape constructor should not be consumed.", 4224)>]
  