anchor.diff:      | 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)>]
  
positive.code:     abstract Accept : ITypeShapeVisitor<'R> -> 'R
      override s.ToString() = sprintf "TypeShape [%O]" s.Type
  
  [<Sealed>]
  type TypeShape<'T> () =
      inherit TypeShape()
  
negative.code:     override __.Accept v = v.Visit<'T> ()
  
  exception UnsupportedShape of Type:Type
      with
      override __.Message = sprintf "Unsupported TypeShape '%O'" __.Type
  
  [<AutoOpen>]
  