ラムダ式使わないようにrevnumbering書き直したら、nobsunさんに怒られそうなコードになった

自分のコードと発想を元に、なるべくラムダ式を使わない&zipWithを活用する形で書いてみたら・・・・
nobsunさんに思い切り怒られそうなコードが出来上がってしまいました。
nobsunさんのコードナンバリング - Qiitaとは関数の切り分ける処理の単位が違うので、汚くなるのは仕方ないにしても、これは酷過ぎる・・・

import System.Environment

numbering = unlines.zipWith (++) [show x | x <- [1..]].lines

main = getArgs >>= \args -> mapM readFile args >>= return.map (numbering.reverse) >>= 
			putStrLn.concat.zipWith (++) (map (++"\n") args).map (++"\n")

まだ、ラムダ式をそのまま関数にしたこっちの方が、汚いながらもまだ分かりやすい気がする。

import System.Environment

numbering = unlines.zipWith (++) [show x | x <- [1..]].lines

main = getArgs >>= \args -> mapM readFile args >>= return.map (numbering.reverse) >>= 
			putStrLn.concat.zipWith f args
        where
            f xs ys = xs ++ "\n" ++ ys ++ "\n"   

どちらにしても、まだzipWithの使い処が理解できてないというか、関数の切り分け箇所が手続き型的な発想のままみたいで・・・・
面目ないです・・・

あ、numbering関数の方は、通りすがりさんのコードを参考にさせて頂きました。
こちらだけは、すっきりして気に入っています。


2012年12月9日20時36分追記

少しだけマシなコードが出来たので一応。

import System.Environment

numbering = unlines.zipWith (++) [show x | x <- [1..]].lines

main = getArgs >>= \args -> mapM readFile args >>=
			putStr.concat.zipWith f args.map (numbering.reverse)
	where
		f xs ys = concat [xs,"\n",ys,"\n"]