Formatting
Relax bounce to FnOnce
Put macros in separate crate for abstraction

We probably want to expand the macro into a private module so that the enum
constructors are not public. Since we provide fold, working with the functor
should be enough I think.