Moved from a monad transformer approach to free-monad approach, currently only run and exit on first match
The secret sauce turned out to be the list MonadPlus instance, now to figure out Existential data