If I saw that signature, I think I'd run. I think the pair of functions makes the interface very clear, leaving the (_, _) => () as an implementation detail. If you feel like the interface is too polluted though, I can make this change.