Maybe we should add some documentation about how this listener stuff works.

Also document the parameters you will pass into `fn` and how you expect it to pass control back