anchor.diff:        Children : Tree<'Data> list }
   
   type XamlNode =
  -    { NodeType : Type
  +    { IsRoot: bool
  +      Name: string
  +      NodeType : Type
         Data : XamlId
         Children : XamlNode list }
   
  
positive.code:                     let hasChildren = not xaml.IsEmptyElement
                      match skipUnnamed, data with
                      | _, Named _ | false, Unnamed _->
                          { NodeType = typeOfXamlElement typeName 
                            Data = data 
                            Children = (if hasChildren then readNewElement true [] else []) }
                          :: siblings
                          |> readNewElement skipUnnamed
                      | true, Unnamed _ ->
                          readNewElement true siblings
                          |> readNewElement true
                  | None -> failwithf "Error near %A" (posOfReader filename xaml)
              | XmlNodeType.EndElement -> siblings
              | XmlNodeType.Comment | XmlNodeType.Text -> readNewElement skipUnnamed siblings
              | unexpected -> failwithf "Unexpected node type %A at %A" unexpected (posOfReader filename xaml)
  
      let dontSkipTop = false
  
      match readNewElement dontSkipTop [] with
      | [root] -> root
      | _ :: _ -> failwith "Multiple roots"
      | [] -> failwith "No root"
  
negative.code:     match wpfAssembly.GetType(sprintf "System.Windows.Controls.%s" other) with
      | null -> typeof<obj>
      | st -> st
  
     
  let readXamlFile filename (xaml:XmlReader) =
      let rec readNewElement isRoot skipUnnamed siblings =
          match xaml.Read() with
          | false -> siblings
          | true ->
  