main = do cs <- getContents
putStr cs
- do
- "<-"
- getContentsアクションの結果入力された文字列に変数を束縛する。
: getContents , putStr cs
let rec cat () = try
begin
output_char stdout (input_char stdin) ;
cat ()
end
with
End_of_file -> ()
let _ = cat ()
Haskell以外の言語では I/Oモナドみたいな仕組みが無いのでループ(再帰)を使うか入力サイズを制限するかしなきゃならない。
追記
モナドらしく書くとこうなるらしい。すごいシンプル。
main = getContents >>= putStr