ファイルの中身の文字数、ワード数、行数を表示するコマンド(他の言語の投稿求む)

すみません。
Python,Rubyでも書くつもりで居たのですが、消防団の活動日と、習い事の日と、おまけに選挙の日と、予約してた本が届いた日が重なって、とてもじゃないですけど、ちょっと前に書いたHaskellのコードを載せるのが精一杯になってしまいました。
出来れば、Haskellに詳しい方も、他の言語に詳しい方も、挑戦して頂けると幸いです。
時間が出来た時(多分、正月頃・・・)に、各コードのベンチマーク結果を載せた日記を上げます。

条件としては、空白や改行は一文字に数えてません。純粋に文字らしいものが書かれたもののみ、1文字とカウントしています。
条件違った・・・。
条件としては、改行や空白文字がいくつ並んでいても、空白1文字として数えます。
そして、ベンチマークに丁度良いデータも用意できました。
スーパーπで生成できる一番大きなπ。3355万桁を収めたpi.datがテキストデータだったので、それを今回は食わせてみようと思います。


あと、来週は3連休の休日も全部潰れて仕事なので、日記も、コメントの返信も出来そうにないです。
申し訳ない。

しかも、せっかくnobsunさん、通りすがりさんに教えて頂いた書き方を習う前のコードを載せます・・・・。

ええ、思い切りラムダ式使ってます。
むしろ、メインの処理だと言っていいくらい・・・・。

では、どうぞ。Haskellのコードです。

import System.Environment

main = getArgs >>= \fnames -> 
	mapM readFile fnames >>= 
	mapM_ (\(x,y) -> 
		putStrLn $ concat [x, 
				"\nchars = ", show.length.unwords $ words y,
				" words = ", show.length $ words y,
				" lines = ", show.length $ lines y, "\n"]).zip fnames

でも、まあ、これで私のまともに書いたコードの貯蔵は無くなりました。
次回からは、ちゃんとお二人の助言を活かせたコードを公開できると思います。
多分・・・・きっと・・・出来ると、良いなぁ・・・。

正直、次回は正月前後になると思いますが、次回は、生まれて初めて、検索と言う処理を作ってみようと思います。
検索したいキーワードと、ファイル名を渡すと、そのファイルの中のキーワードの位置(複数)のリストを表示する。と言うのに挑戦したいと思います。
(これは、ベンチマークの後、余裕が有ったら・・・)