was thinking about tuplespace-oriented programming. back in school, i learned about the use of Linda as a synchronization primitive (with a data payload!), and thought a little later about how you could tie that idea into some sort of a micro-Erlang. Like...
("add1", x, y) -> ("catadd", x+y)
("add2", x, y) -> ("catadd", x+y)
("catadd", x) ("catadd", y) -> ("IO", [str x] ++ [str y])
...with inputs placed into the tuplespace:
("add1", 1), ("add1", 2), ("add2", 3), ("add2", 4)
...would indeterminately output either "36" or "63"
Some functional programming courses actually cover how to implement your own parser combinator libraries--and in fact, once you've got the basic connections to the data structures all together, these sorts of libraries can actually be made of highly generic components. Pedagogically, it probably is a pretty solid choice for a first sizable FP project, especially in a language at least like Haskell. might be worth revisiting if y'all ever poke around in that world