protected T CreateNewInstance(IMap <string, INode> childNodes, IStateTreeNode meta)
        {
            var observables = Mutables.Select(mutable => new ObservableProperty {
                Type = mutable.Kind, Name = mutable.Name, Default = mutable.Default
            }).ToList();

            var volatiles = Volatiles.Select(xvolatile => new Observable.VolatileProperty {
                Type = xvolatile.Kind, Name = xvolatile.Name, Default = xvolatile.Default
            }).ToList();

            var computeds = Views.Select(view => new ComputedProperty {
                Type = view.Kind, Name = view.Name, Compute = view.View
            }).ToList();

            // var actions = Actions.Select(action => new ActionMethod { Name = action.Name, Action = action.Action });

            ObservableTypeDef typeDef = new ObservableTypeDef(observables, volatiles, computeds);

            var instance = ObservableObject <T, INode> .FromAs(typeDef, Proxify, Name, this, meta);

            return(instance);
        }