追記
行ごとに処理するだけならこんなのでも良かった。
import Data.List main = interact $ \d -> let (l,w,c) = calc d in show l ++ " " ++ show w ++ " " ++ show c where calc = foldl' sadd (0,0,0) . map wccc . lines wccc str = (length $ words str,length str) sadd (l,w,c) (wc,cc) = seq wc $ seq cc $ (l+1,w+wc,c+cc)
実行時間が3秒ぐらいになったけど、
行数は縮んだ。