That looks really cool, awesome to be able to generate static FSM code. I use my FSM (and started to use Jake Gordon's) when I need a lightweight state variable, a step up from a collection of bools when it starts to get messy with lots of ands and ors.
Thanks for the feedback! It's a good suggestion, and having something else than strings as events is something that I have analyzed. Currently different handlers depends on string operations as selectors, for example "before_<event>". Any ideas on how to move that to the static type world (preferably without using the reflect package)?