Haskellメモ inkey$を実現する


難しいことを簡単にし,簡単なことを難しくする,などといわれる純粋関数型言語 Haskell。かつてBasic 言語でプログラミングをしていた際によくつかったinkey$関数の実現方法を調べてみた。

inkey$関数とは実行されたときに押されている一文字からなる文字列を返す関数。キーが押されていないときは””が返ってきたはず(30年以上前の記憶なのでうろ覚え)。

以下のコード〜raspberry pi で動けばいいので,とりあえずはこんなコードで〜を macOS で動作確認したところ,おおむね期待通りに動作した。Windows でどうなるかは不明。

import Data.ByteString as BS
import System.IO

main :: IO ()
main = do
 hSetBuffering stdin NoBuffering -- set non buffering mode 
 keyscaned <- BS.hGetNonBlocking stdin 1 -- ::IO ByteString
 if keyscaned == BS.empty
 then main
 else do
 print keyscaned
 main