public static ReadOnlyCollection <IImmutableHierarchy2> Family2(this IImmutableHierarchy2 node)
 {
     if (node == null)
     {
         return(Seq.Empty <IImmutableHierarchy2>().ToReadOnly());
     }
     return(node.Concat(node.ChildrenRecursive2()).ToReadOnly());
 }
 public static ReadOnlyCollection <IImmutableHierarchy2> ChildrenRecursive2(this IImmutableHierarchy2 node)
 {
     if (node == null)
     {
         return(Seq.Empty <IImmutableHierarchy2>().ToReadOnly());
     }
     return(node.Children.Flatten(n => n == null ? Seq.Empty <IImmutableHierarchy2>() : n.Children).ToReadOnly());
 }
 public static ReadOnlyCollection <IImmutableHierarchy2> Hierarchy2(this IImmutableHierarchy2 node)
 {
     if (node == null)
     {
         return(Seq.Empty <IImmutableHierarchy2>().ToReadOnly());
     }
     return(node.Unfoldi(n => n.Parent, n => n != null).ToReadOnly());
 }
 public static IEnumerable <IImmutableHierarchy2> Children2(this IImmutableHierarchy2 node)
 {
     return(node.Children);
 }
 public static ReadOnlyCollection <T> Family2 <T>(this IImmutableHierarchy2 <T> node)
     where T : class, IImmutableHierarchy2 <T>
 {
     return(((IImmutableHierarchy2)node).Family2().AssertCast <T>().ToReadOnly());
 }
 public static ReadOnlyCollection <T> ChildrenRecursive2 <T>(this IImmutableHierarchy2 <T> node)
     where T : class, IImmutableHierarchy2 <T>
 {
     return(((IImmutableHierarchy2)node).ChildrenRecursive2().AssertCast <T>().ToReadOnly());
 }
 public static IEnumerable <T> Children2 <T>(this IImmutableHierarchy2 <T> node)
     where T : class, IImmutableHierarchy2 <T>
 {
     return(node.Children);
 }