Я могу инициализировать состояние с помощью STM и распечатать его:
module Main where
import Control.Concurrent.STM
data State = State {name :: String} deriving (Show)
type MyAppState = TVar [State]
initState :: STM MyAppState
initState = newTVar [State "hi"]
main :: IO ()
main =
do
state <- atomically initState
stateToPrint <- readTVarIO state
putStrLn (show stateToPrint)
Я попытался создать функцию для обновления состояния:
updateState :: String -> State -> State
updateState newName s = State newName : s
Но я не уверен, как разместить его в основном блоке do без того, чтобы компилятор выдал ошибку, поскольку он ожидает тип State
, но ему передается MyAppState
.