僕には関数型的発想が足りない(はがない)

ライトノベル、僕には友達が少ない。略してはがない。面白いです。
タイトルがあれなので、電子書籍でしか買う勇気がないですが・・・

それはともかく、以前の日記(「ふと、手続き型言語だとちょっと大変かな?と思ったプログラム」のプログラムをPythonとRubyで書いてみた - しんちゃんの日記)で通りすがりさんと、nobsunさんから頂いたコードを一体、どういう発想から書いたのかが皆目見当も付かないのに悩んでおります。
私のコードは単純に、手続き型言語のループの代わりにmap(&mapM_)を使って、bind記法にしただけなのですが、お二人のzipWithを使った処理の流れ自体は何となく理解したのですが、今後、同じ発想が浮かぶか?と言われると、多分浮かびません。
こういう発想は、もっとzipWithを使っていくうちに自然と出てくるものなのか?
それとも、何かしら関数脳の強化が必要なのか?

参考までに、お二方から(以外の方ももちろん歓迎)、どの様な着想から、あの発想に至ったのか御教授頂けると助かりますm(_ _)m

余談と言うか、個人的な不満(?)なのですが、このzipWithは、どっちかと言うとmapをリスト二つ受け取る感じにしたものに見えるのですが・・・・
なので、zip3とかみたいにmap2とか、そういう関数名の方が適切に見えるのですが・・・