You're probably thinking to yourself, "what's the point in yet another Lisp-like language?" Well, that's a great question! Mappy's really a breakable toy for my amusement (i.e. in its current state, Mappy's definitely not ready for production). That being said, here are some interesting design choices in the language
- I decided to go with maps rather than lists, because maps are more closely related to functions
- Keeping expressions simple and singular (a la Lisp) makes parsing and grammar rules trivial
- (Bias alert) Haskell is an amazing language in which to implement compilers
- I didn't want to implement
if
as a core primitive, so I had to choose between non-strictness and auto-closure function arguments (the latter won for simplicity reasons) - Parsec and QuickCheck can really save you when you're trying to keep complex rules consistent (e.g. parsing)
- Github issues and milestones are an excellent way to break a problem into small chunks and really focus
- Implementing IO as a map has had constraining effects (no pun intended) that are similar to the IO monad
If you're interested in contributing, have a peek at the issues or feel free to play with it, see the README, and/or file some issues!