私はHaskellでBrainf*ckインタープリターを書いています。
(chr (fromEnum $ getMem state))
Word8をCharに変換しただけの印刷を試みています。次に、特定の場合に印刷した後、新しい状態に戻したいと思います。
'.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
hFlush stdout
return state { prog_pointer = prog_pointer state}
このエラーメッセージが表示されます
The function `hPutChar' is applied to six arguments,
but its type `Handle -> Char -> IO ()' has only two
In a stmt of a 'do' block:
hPutChar
stdout
(chr (fromEnum $ getMem state))
hFlush
stdout
return
(state {prog_pointer = prog_pointer state})
このコードで
iterateBF :: BFState -> IO BFState
iterateBF state = case (program state !! prog_pointer state) of
--some more cases here--
'.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
hFlush stdout
return state { prog_pointer = prog_pointer state}
なぜこのエラーが発生するのか理解できないようです。
leftaroundaboutとsabaumaのコメントの後、コードを次のように編集しました
iterateBF :: BFState -> IO BFState
iterateBF state = case (program state !! prog_pointer state) of
--some more cases here--
'.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
hFlush stdout
return state { prog_pointer = prog_pointer state}
今回はスペースのみを使用します。
しかし、私はparse error on input 'hFlush'
誰もが理由を知っていますか?