追記

行ごとに処理するだけならこんなのでも良かった。

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秒ぐらいになったけど、
行数は縮んだ。