ふつけるを読んでいてちょっと?となったところ(その1)

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつけるのP53の2.8練習問題で

1 標準入出力から読んだバイト数を数えるコマンド、countbyteを書きなさい。

というのがある。Haskellでは文字列は文字のリストなので、ふつうに書くと
countbyte.hs

main = do cs <- getContents
          print $ length cs

こんなかんじで良さそうではある。

% ghc countbyte.hs -o countbyte
% ./countbyte < hoge.txt

のように実行すれば確かにちゃんと動く。
そこで

% ./countbyte

とだけ入力して実行して、つぎの行で

abcdefghijklmnopqrstuvwxyz

などと入力してリターンキーを押しても何も起こらない。
一行ごとにそのバイト数を表示することを期待しているがどうやらこれではだめな模様。

ふつけるにあった似たようなプログラムでファイルの中身を表示するcat.hsというものがあって(P34あたり参照)
cat.hs

main = do cs <- getContents
          putStr cs
% ghc cat.hs -o cat
% ./cat

とし、次の行で適当にafoと入力してリターンキーを押せば

afo

と返ってくる。


うーん、それでは一行ごとにバイト数を表示させるにはどうしたらいいんだろう。
countbyte.hsとcat.hsの違いはlength関数とprint, putStr関数なので、ここらのどこかにその違いを生んでいるところがあるはずなのだが、よくわからない><