module Hix.Managed.Handlers.StateFile.Test where import Data.IORef (IORef, modifyIORef, newIORef) import Hix.Data.Monad (M) import Hix.Data.NixExpr (Expr) import Hix.Managed.Handlers.StateFile (StateFileHandlers (StateFileHandlers, writeFile)) writeFileIORef :: IORef [Expr] -> Maybe a -> Expr -> M () writeFileIORef :: forall a. IORef [Expr] -> Maybe a -> Expr -> M () writeFileIORef IORef [Expr] out Maybe a _ Expr expr = IO () -> M () forall a. IO a -> M a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO () -> M ()) -> IO () -> M () forall a b. (a -> b) -> a -> b $ IORef [Expr] -> ([Expr] -> [Expr]) -> IO () forall a. IORef a -> (a -> a) -> IO () modifyIORef IORef [Expr] out (Expr expr :) handlersUnitTest :: MonadIO m => m (StateFileHandlers, IORef [Expr]) handlersUnitTest :: forall (m :: * -> *). MonadIO m => m (StateFileHandlers, IORef [Expr]) handlersUnitTest = do IORef [Expr] ref <- IO (IORef [Expr]) -> m (IORef [Expr]) forall a. IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO ([Expr] -> IO (IORef [Expr]) forall a. a -> IO (IORef a) newIORef []) let handlers :: StateFileHandlers handlers = StateFileHandlers {writeFile :: Maybe (Path Abs Dir) -> Expr -> M () writeFile = IORef [Expr] -> Maybe (Path Abs Dir) -> Expr -> M () forall a. IORef [Expr] -> Maybe a -> Expr -> M () writeFileIORef IORef [Expr] ref} (StateFileHandlers, IORef [Expr]) -> m (StateFileHandlers, IORef [Expr]) forall a. a -> m a forall (f :: * -> *) a. Applicative f => a -> f a pure (StateFileHandlers handlers, IORef [Expr] ref)