This document discusses ProFunctor, Arrow, and their relationships. [1] ProFunctors generalize Functors by allowing mapping of both the domain and codomain of a function, while Functors only allow mapping the codomain. [2] Arrows allow mapping of both domain and codomain like Profunctors, and provide additional operations. [3] The ProFunctor type class splits the constraints of Arrow into separate operations for mapping the domain and codomain.