... in addition to other learning objectives students feel their work accomplishes.
The two sub-programs (setup and loop) are defined by the Algebraic Data Type Typed that I made to represent my Abstract Syntax. These metaprograms are compiled into IO programs using a function I wrote called eval and the IO program is spliced in. At runtime, the IO program will run the setup computation once and then the loop computation forever.
TL;DW