private string ToString(object obj, string indent)
        {
            if (obj == null)
            {
                return(indent + "[null]");
            }
            else
            {
                if (!(obj is string))
                {
                    IEnumerable eo = obj as IEnumerable;
                    if (eo != null)
                    {
                        return(eo.Cast <object>().Select(o => ToString(o, indent + "  ")).Join("\n"));
                    }
                }
                SimpleStructured ss = obj as SimpleStructured;
                if (ss != null)
                {
                    return(ToString(ss.InlinedStructure(), indent));
                }

                return(indent + obj.ToString());
            }
        }
        public override bool Equals(object obj)
        {
            SimpleStructured other = obj as SimpleStructured;

            if (other == null)
            {
                return(false);
            }

            return(InlinedStructure().SequenceEqual(other.InlinedStructure(), new SimpleEqualityComparer()));
        }