Note that you can explicitly annotate function types (possibly with _ at some places when full types would be too long or are irrelevant). I've been doing it more and more recently and it's really readable.
--
Simon (from my phone)