У меня есть небольшая программа, которая определяет учетную запись, функцию вывода и пытается выйти из нее. Однако он не компилируется и выдает следующую ошибку:
Couldn't match expected type ‘(STM a0 -> IO a0)
-> STM () -> IO ()’
with actual type ‘IO ()’
Похоже, что компилятор не распознает преобразование из STM в IO. Любые указатели были бы замечательными.
import System.IO
import Control.Concurrent.STM
type Account = TVar Int
withdraw :: Account -> Int -> STM ()
withdraw acc amount = do
bal <- readTVar acc
writeTVar acc (bal - amount)
good :: Account -> IO ()
good acc = do
hPutStr stdout "Withdrawing..."
{-hi-}atomically{-/hi-} (withdraw acc 10)
main = do
acc <- atomically (newTVar 200)
good acc
hPutStr stdout "\nDone!\n"
{-hi-}
s и т. Д. Вы встроилиatomically
. - person Willem Van Onsem   schedule 02.07.2019