{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} module Proof.Assistant.State where import Control.Concurrent.STM (TBQueue, newTBQueueIO) import Proof.Assistant.Request (InterpreterRequest) import Proof.Assistant.Settings -- | Simple state with settings and queue as communication model between bot and backend. data InterpreterState settings = InterpreterState { settings :: !settings , input :: !(TBQueue InterpreterRequest) } -- | Initialise a state based on its settings. newInterpreterState :: forall settings. ToInterpreterState settings => settings -> IO (InterpreterState settings) newInterpreterState settings = do input <- newTBQueueIO (getQueueSize settings) pure InterpreterState{..}