module Ribosome.Control.Ribosome where import Data.MessagePack (Object) import Prelude hiding (state) import Path (Abs, Dir, Path) import Ribosome.Data.Errors (Errors) import Ribosome.Data.Scratch (Scratch) type Locks = Map Text (TMVar ()) data RibosomeInternal = RibosomeInternal { RibosomeInternal -> Locks _locks :: Locks, RibosomeInternal -> Errors _errors :: Errors, RibosomeInternal -> Map Text Scratch _scratch :: Map Text Scratch, RibosomeInternal -> Map Text Object _watchedVariables :: Map Text Object, RibosomeInternal -> Maybe (Path Abs Dir) _projectDir :: Maybe (Path Abs Dir) } deriving ((forall x. RibosomeInternal -> Rep RibosomeInternal x) -> (forall x. Rep RibosomeInternal x -> RibosomeInternal) -> Generic RibosomeInternal forall x. Rep RibosomeInternal x -> RibosomeInternal forall x. RibosomeInternal -> Rep RibosomeInternal x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep RibosomeInternal x -> RibosomeInternal $cfrom :: forall x. RibosomeInternal -> Rep RibosomeInternal x Generic, RibosomeInternal RibosomeInternal -> Default RibosomeInternal forall a. a -> Default a def :: RibosomeInternal $cdef :: RibosomeInternal Default) makeClassy ''RibosomeInternal data RibosomeState s = RibosomeState { RibosomeState s -> RibosomeInternal _internal :: RibosomeInternal, RibosomeState s -> s _public :: s } deriving ((forall x. RibosomeState s -> Rep (RibosomeState s) x) -> (forall x. Rep (RibosomeState s) x -> RibosomeState s) -> Generic (RibosomeState s) forall x. Rep (RibosomeState s) x -> RibosomeState s forall x. RibosomeState s -> Rep (RibosomeState s) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall s x. Rep (RibosomeState s) x -> RibosomeState s forall s x. RibosomeState s -> Rep (RibosomeState s) x $cto :: forall s x. Rep (RibosomeState s) x -> RibosomeState s $cfrom :: forall s x. RibosomeState s -> Rep (RibosomeState s) x Generic, RibosomeState s RibosomeState s -> Default (RibosomeState s) forall a. a -> Default a forall s. Default s => RibosomeState s def :: RibosomeState s $cdef :: forall s. Default s => RibosomeState s Default) makeClassy ''RibosomeState data Ribosome s = Ribosome { Ribosome s -> Text _name :: Text, Ribosome s -> TMVar (RibosomeState s) _state :: TMVar (RibosomeState s) } makeClassy ''Ribosome newRibosomeTMVar :: MonadIO m => s -> m (TMVar (RibosomeState s)) newRibosomeTMVar :: s -> m (TMVar (RibosomeState s)) newRibosomeTMVar s s = IO (TMVar (RibosomeState s)) -> m (TMVar (RibosomeState s)) forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (TMVar (RibosomeState s)) -> m (TMVar (RibosomeState s))) -> IO (TMVar (RibosomeState s)) -> m (TMVar (RibosomeState s)) forall a b. (a -> b) -> a -> b $ RibosomeState s -> IO (TMVar (RibosomeState s)) forall (m :: * -> *) a. MonadIO m => a -> m (TMVar a) newTMVarIO (RibosomeInternal -> s -> RibosomeState s forall s. RibosomeInternal -> s -> RibosomeState s RibosomeState RibosomeInternal forall a. Default a => a def s s) newRibosome :: MonadIO m => Text -> s -> m (Ribosome s) newRibosome :: Text -> s -> m (Ribosome s) newRibosome Text name' = Text -> TMVar (RibosomeState s) -> Ribosome s forall s. Text -> TMVar (RibosomeState s) -> Ribosome s Ribosome Text name' (TMVar (RibosomeState s) -> Ribosome s) -> (s -> m (TMVar (RibosomeState s))) -> s -> m (Ribosome s) forall (f0 :: * -> *) (f1 :: * -> *) a b. (Functor f0, Functor f1) => (a -> b) -> f1 (f0 a) -> f1 (f0 b) <$$> s -> m (TMVar (RibosomeState s)) forall (m :: * -> *) s. MonadIO m => s -> m (TMVar (RibosomeState s)) newRibosomeTMVar