Many years ago I worked on a test editor with a data structure like VI, where each buffer was a list of strings, rather than emacs where a buffer with two strings where point implicitly is between them, but written in pure style and scriptable in Clojure.