2
私はHaskellを初めて使用しています。同時I/Oがどのように機能するのかよく分かりません。私はJACKオーディオバインディングで何が達成できるのかを探っています。 、Haskell - 並行I/Oルーティング
Input | Result | Output
----------------------------------------
330 | Frequency changes | ">> 330.0"
440 | Nothing happens | ""
220.0 | Frequency changes | ">> 220.0"
550.0 | Nothing happens | ""
bleh | Outputs "Nada" | ">> Nada"
| Nothing Happens | ""
foo | Outputs "Nada" | ">> Nada"
私はよく分からない:基本的には、次のコードは(ほとんど)機能であるが、私は、入力値二倍たびにEnterキーを押す必要があります。問題を明確にするために
collectInput :: IORef Double -> IO()
collectInput freq = forever $ do
putStr ">> "
hFlush stdout
f <- getLine
case readMaybe f of
Just x -> do
putStrLn $ show x
writeIORef freq x
Nothing -> do
putStrLn "Nada"
main :: IO()
main = do
freq <- newIORef 440
_ <- forkIO $ runJackStuff freq
collectInput freq
をIOストリームはスレッドを通じて循環されるように見えます。他のすべての行ではなく、入力行ごとにプログラムを読み込ませる方法はありますか?
問題を再現できません。 MCVEを作成することを検討してください。これにはインポートが含まれ、 'runAudioStuff'が除外され、サンプルをテストして、それが正しく動作しないようにしてください。私のバージョンはうまく動作します。もしあなたのものがそうでなければ、それはあなたの端末の問題であり、Haskellの問題ではないと思われます。 –