anchor.diff:                          value, if value <>& null then value.GetType() else fi.FieldType //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) })
  -            DataMember({LoadingText=pretext fi.FieldType.FSharpName "Loading..." ; Lazy=delayed })
  +                makeMemberLazyCustomInfo value valueTy pretext)
  +            DataMember({LoadingText=pretext fi.FieldType.FSharpName loadingText ; Lazy=delayed })
   
           let getMethodWatch (mi:MethodInfo) =
               let pretext = sprintf "(M) %s() : %s%s" (getMemberName mi)
  
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:             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) =
  