Although I'm sort of familiar with functional programming, I still find the last two code versions more readable than the more clever ones.
Conversation
Usually, even in functional code, I prefer giving meaningful names to entities, and factor abstractions into problem-specific categories. This probably makes code a bit less "clever", but appreciates the value of interfaces in software design.
