Haskell の入出力のバッファリング

参考にした記事: stackoverflow/ putStrLn doesn’t print to console

「すごいHaskell楽しく学ぼう!」を復習していて,入出力で詰まったのでメモ.この本の8.3(英語のWeb版だとこの辺)で,IOを用いた対話型のプログラムが扱われる.

main = do
	putStrLn "Hello, what's your name?"
	name <- getLine
	putStrLn ("Hey " ++ name ++ ", you rock!")

runghc したら一向にHello, what’s your name?と聞かれないので困ってしまった.どうやらバッファリングされてしまってるらしい.上に掲げたstackoverflowの記事で解決策を見つけた.

import System.IO

main = do
	hSetBuffering stdout LineBuffering
	putStrLn "Hello, what's your name?"
	name <- getLine
	putStrLn ("Hey " ++ name ++ ", you rock!")

このように修正しておくとちゃんと名前を聞いてくれる.

とりあえずメモしておく.

広告