anchor.diff:                  let fieldCtors = s.Properties |> Seq.map mkEmptyField |> Seq.toArray
                   wrap (fun () -> fieldCtors |> Array.map (fun f -> f ()) |> s.ConstructorInfo.Invoke :?> 't) }
   
  -    | _ -> failwithf "Type '%O' does not support empty types." typeof<'T>
  +    | Shape.DefaultConstructor s ->
  +        s.Accept { new IDefaultConstructorVisitor<unit -> 'T> with
  +            member __.Visit<'t when 't : (new : unit -> 't)>() =
  +                wrap(fun () -> new 't() |> unbox<'T>)
  +        }
  +
  +    | _ -> failwithf "Type '%O' does not support empty values." typeof<'T>
   
   and empty<'T> = mkEmptyFunc<'T> () ()
   
  
positive.code:     | Shape.KeyValuePair s ->
          s.Accept { new IKeyValuePairVisitor<unit -> 'T> with
              member __.Visit<'K,'V>() = 
                  let kt,vt = mkEmptyFunc<'K>(), mkEmptyFunc<'V>()
                  wrap(fun () -> new KeyValuePair<'K,'V>(kt(),vt())) }
  
      | Shape.FSharpRecord s as ts ->
          let mkEmptyField (p : PropertyInfo) =
  
negative.code:             member __.Visit<'t1,'t2,'t3> () =
                  let et1,et2,et3 = mkEmptyFunc<'t1>(), mkEmptyFunc<'t2>(), mkEmptyFunc<'t3>()
                  wrap(fun () -> et1 (), et2(), et3()) }
  
      | Shape.Tuple4 s ->
          s.Accept { new ITuple4Visitor<unit -> 'T> with
              member __.Visit<'t1,'t2,'t3,'t4> () =
                  let et1,et2,et3,et4 = mkEmptyFunc<'t1>(), mkEmptyFunc<'t2>(), mkEmptyFunc<'t3>(), mkEmptyFunc<'t4>()
                  wrap(fun () -> et1 (), et2(), et3(), et4()) }
  
      | Shape.FSharpOption s ->
          s.Accept { new IFSharpOptionVisitor<unit -> 'T> with
  