-1
我正在Haskell寫一個Brainf * ck解釋器。Haskell - 同時打印並返回一個狀態
我試圖打印(chr (fromEnum $ getMem state))
這只是Word8轉換爲字符。 後來我想這是
'.' -> 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'
任何人都知道爲什麼嗎?在leftaroundabout的評論
縮進!縮進!縮進! – leftaroundabout
lefaroundabout是正確的。 do-block的所有表達式都需要具有相同級別的縮進。讓你的第一行代碼與其餘代碼一致。 – sabauma
@sabauma aah好吧。當你說與其他代碼對齊時,你指的是哪個代碼的其餘部分? – ali