import some experiments with using GADTs, phantom types, & singletons
note about finite vs infinite strings