Standardize & document cats' stance on currying
As of c675ee3da29b60da578eeb03cfd289c19cbbd8b0, we have a mix of currying styles for methods that take 2+ functions.
Invariant (imap) and Profunctor (dimap) pass each function in its own argument list whereas Bifunctor (bimap), Kleisli (dimap), and Cokleisli (dimap) pass both functions in the same argument list.
Let's pick a style and make it consistent throughout.
I think I prefer functions to get their own argument lists. I am probably responsible for the inconsistency but I'd like to standardize on that if possible (especially since in some cases it makes a big difference for type inference).
@non do you have an example of when using separate argument lists improves type inference? It seems like I've been aware of examples in the past, but I'm having trouble recreating one.
Option.fold is an example of a method in which I often run into type inference issues that wouldn't occur if it had only a single argument list. Here is an example.