public override ImmutableCollection <T> RemoveFront() { if (m_left.Size > 1) { return(new NormalCollection(m_left.RemoveFront(), m_middle, m_right)); } else if (!m_middle.IsEmpty) { return(new NormalCollection(m_middle.Front, m_middle.RemoveFront(), m_right)); } else if (m_right.Size > 1) { return(new NormalCollection(new One(m_right.Front), ImmutableCollection <MiniCollection> .Empty, m_right.RemoveFront())); } else { return(new SingleCollection(m_right.Front)); } }