Arrowを使ってwcコマンドを実装してみました

Arrowを写経 - 趣味的にっきでArrowの写経をしてみました。次は実際に簡単なプログラムで使ってみよう。ということで、wcコマンドを実装してみました(意図的に無理矢理使っているような気もします)。
入力の文字列を単語数、行数、バイト数の3つのパイプに分けてそれぞれ計算します。最後に3つのパイプを合わせで文字列を作るところはタプルのパターンマッチを使っています。演算子じゃなくてパターンマッチっていうのが、いまひとつかっこ悪いのですが、何かいい方法ありませんかね?

module Main (main) where

import Control.Arrow ((<<<), (&&&), (***))

wc :: String -> String
wc = (\ (w, (l, b)) -> "\t" ++ w ++ "\t" ++ l ++ "\t" ++ b)
       <<< show   *** show   *** show
       <<< length *** length *** length
       <<< lines  &&& words  &&& id

main :: IO ()
main = putStrLn . wc =<< getContents