「ふつうの Haskell プログラミング」について質問です。
次の cat プログラムの例が載っているのですが、

main = do cs <- getContents
putStr cs

これを実行すると、標準入力への入力が出力されるのですが、
これが何度も繰り返される仕組みがよくわかりません。

% ./cat
aaa # 入力
aaa # 出力、入力待ち
bbb # 入力
bbb # 出力、入力待ち
...

本には遅延評価って説明がありましたが、
ループが無いのに何度も入力/出力されるのが不思議です。
なぜこうなるんでしょう?