anchor.diff:  let applyEntityChange world (change : EntityPropertyChange) =
       let entityLens = World.entity change.Address
       let entity = get world entityLens
  -    let entity2 = { entity with Id = entity.Id } // NOTE: this is just a hacky way to copy an entity
  +    let entity2 = { entity with Id = entity.Id } // NOTE: this is just a hacky way to copy an entity without reflection
       change.FieldInfo.SetValue (entity2, change.Value)
       set entity2 world entityLens
   
  
positive.code:                       IsVisible = true
                        EntitySemantic = Gui testTextBoxGui }
          
                  refRefWorld.Value := addScreen testScreen testScreenAddress refRefWorld.Value.Value
                  refRefWorld.Value := setP (Some testScreenAddress) World.optActiveScreenAddress refRefWorld.Value.Value
                  refRefWorld.Value := addGroup testGroup testGroupAddress refRefWorld.Value.Value
                  refRefWorld.Value := addEntityGuiTextBox (testTextBoxGuiEntity, testTextBoxGui, testTextBox) testTextBoxAddress refRefWorld.Value.Value
  
                  let testTypeSource = { Address = testTextBoxAddress; RefRefWorld = refRefWorld }
                  form.propertyGrid.SelectedObject <- testTypeSource
  
                  form.exitToolStripMenuItem.Click.Add (fun _ -> form.Close ())
                  form.Show ()
                  Right refRefWorld.Value.Value)
          (fun world ->
              refRefWorld.Value := applyEntityChanges gEntityChanges world
              (not form.IsDisposed, refRefWorld.Value.Value))
          (fun world ->
              form.displayPanel.Invalidate ()
              world)
  
negative.code: 
  type [<TypeDescriptionProvider (typeof<EntityTypeDescriptorProvider>)>] EntityTypeDescriptorSource =
      { Address : Address
        RefWorld : World ref }
  
  and EntityPropertyDescriptor (fieldInfo : FieldInfo) =
      inherit PropertyDescriptor (fieldInfo.Name.Substring (0, fieldInfo.Name.Length - 1), Array.empty)
  