Taking cues from Evan, the library is split into two modules. The Turtle module has the building blocks that children can start playing with. Turtle.Advanced has a lot of extra goodies for more experienced users. The cool thing is that most of the implementation is in Turtle.Core, which is not exported. Therefore, I can make tweaks to union types and such without a major release.
It's kind of odd if you think about it-- turtles are inherently stateful, and there's a lot of state that is tracked behind the scenes, but Elm is a functional language. I found myself writing wrapper functions in Advanced but they're leaky abstractions. If I wanted to add, say, more state to the evaluator to be able to fully undo these operations, I could. I probably won't in the near future though.
In the process, the
nonempty-list library has matured quite a bit and hopefully someone will find it useful. It is used extensively in Core.