anchor.diff:              match this with
               | Root {Children=children} | Custom {Children=children} -> children
               | CallMember {Lazy=l} | DataMember {Lazy=l} -> l.Value.Children
  +        member this.ValueText =
  +            match this with
  +            | Root {ValueText=vt} -> Some(vt)
  +            | DataMember {Lazy=CreatedValue({ValueText=Some(vt)})} | CallMember {Lazy=CreatedValue({ValueText=Some(vt)})} -> Some(vt)
  +            | _ -> None
   
   open System.Text.RegularExpressions
   let private sprintValue (value:obj) (ty:Type) =
  
positive.code:                         value, if value <>& null then value.GetType() else mi.ReturnType //use the actual type if we can
                      with e ->
                          box e, e.GetType()
                  if typeof<System.Collections.IEnumerator>.IsAssignableFrom(valueTy) then
                      { Custom.Text=pretext valueTy.FSharpName ""; Children=(createResultWatches (value :?> System.Collections.IEnumerator)) }
                  else
                      { Text=pretext valueTy.FSharpName (" = " + (sprintValue value valueTy)); Children=(createChildren value valueTy) })
              CallMember({InitialText=pretext  mi.ReturnType.FSharpName "" ; LoadingText=pretext  mi.ReturnType.FSharpName " = Loading..." ; Lazy=delayed })
  
          let getMemberWatches bindingFlags = seq {
              let members = getMembers bindingFlags
  
negative.code:         elif ty <> null then ty
          else typeof<obj>
  
      let valueText = sprintValue value ty
      let text = sprintf "%s : %s = %s" name ty.FSharpName valueText
      let children = createChildren value ty
      Root({Text=text ; Children=children ; Value=value ; Name=name ; ValueText=valueText})