anchor.diff:          | IPAddress -> if molder.DefaultAsRandom then new IPAddress (int64 (molder.Random.Next ())) :> obj else Guid.Empty :> obj
           | Guid -> if molder.DefaultAsRandom then Guid.NewGuid () :> obj else Guid.Empty :> obj
   
  -    let rec typeToMold pathOpt (ty : Type) molder =
  +    let rec private typeToMold3 pathOpt (ty : Type) molder =
           let key = (pathOpt, ty)
           match molder.Cache.TryGetValue key with
           | (false, _) ->
  
positive.code: 
      let instanceToMold instance molder =
          let ty = instance.GetType ()
          typeToMold None ty molder
  
      let typeToInstance (ty : Type) molder =
          let mold = typeToMold None ty molder
          let instance = moldToInstance mold molder
          instance
  
  
negative.code:                 let caseMolds =
                      cases |>
                      Array.map (fun case ->
                          let fieldMolds = case.GetFields () |> Array.map (fun field -> typeToMold3 (Some (name, field.Name)) field.PropertyType molder) |> Array.toList
                          (case.Name, fieldMolds)) |>
                      Array.toList
                  moldRef := Union (pathOpt, name, caseMolds)
              elif ty.IsGenericType && ty.GetGenericTypeDefinition () = typedefof<_ option> then
                  let containedType = ty.GenericTypeArguments.[0]
                  let containedMold = typeToMold3 None containedType molder
                  moldRef := Option (pathOpt, containedMold)
              elif ty.IsGenericType && ty.GetGenericTypeDefinition () = typedefof<_ list> then
                  let elementType = ty.GenericTypeArguments.[0]
                  let elementMold = typeToMold3 None elementType molder
                  moldRef := List (pathOpt, elementMold)
              elif ty.IsGenericType && ty.GetGenericTypeDefinition () = typedefof<_ Set> then
                  let elementType = ty.GenericTypeArguments.[0]
                  let elementMold = typeToMold3 None elementType molder
                  moldRef := List (pathOpt, elementMold)
              elif ty.IsGenericType && ty.GetGenericTypeDefinition () = typedefof<Map<_, _>> then
                  let keyType = ty.GenericTypeArguments.[0]
                  let keyMold = typeToMold3 None keyType molder
                  let valueType = ty.GenericTypeArguments.[1]
                  let valueMold = typeToMold3 None valueType molder
                  moldRef := Map (pathOpt, keyMold, valueMold)
              elif ty.IsArray then
                  let elementType = ty.GetElementType ()
                  let elementMold = typeToMold3 None elementType molder
                  moldRef := List (pathOpt, elementMold)
              else
                  if molder.ForceIdentification
  