@@ -29,6 +29,7 @@ import Control.Monad.Free
2929import Control.Monad.Reader
3030import Control.Monad.Ref
3131import Control.Monad.State
32+ import Control.Monad.Trans.Control ( MonadBaseControl )
3233import Data.HashMap.Lazy ( HashMap )
3334import qualified Data.HashMap.Strict
3435import Data.Text ( Text )
@@ -52,6 +53,8 @@ import Nix.Utils.Fix1
5253import Nix.Value
5354import Nix.Value.Monad
5455import Nix.Var
56+ import System.Nix.Store.Remote ( runStore )
57+ import System.Nix.Store.Remote.Types ( MonadStoreT (.. ) )
5558
5659-- All of the following type classes defer to the underlying 'm'.
5760
@@ -62,6 +65,7 @@ deriving instance MonadPaths (t (Fix1 t)) => MonadPaths (Fix1 t)
6265deriving instance MonadInstantiate (t (Fix1 t )) => MonadInstantiate (Fix1 t )
6366deriving instance MonadExec (t (Fix1 t )) => MonadExec (Fix1 t )
6467deriving instance MonadIntrospect (t (Fix1 t )) => MonadIntrospect (Fix1 t )
68+ deriving instance MonadStore (t (Fix1 t )) => MonadStore (Fix1 t )
6569
6670deriving instance MonadPutStr (t (Fix1T t m ) m ) => MonadPutStr (Fix1T t m )
6771deriving instance MonadHttp (t (Fix1T t m ) m ) => MonadHttp (Fix1T t m )
@@ -70,6 +74,7 @@ deriving instance MonadPaths (t (Fix1T t m) m) => MonadPaths (Fix1T t m)
7074deriving instance MonadInstantiate (t (Fix1T t m ) m ) => MonadInstantiate (Fix1T t m )
7175deriving instance MonadExec (t (Fix1T t m ) m ) => MonadExec (Fix1T t m )
7276deriving instance MonadIntrospect (t (Fix1T t m ) m ) => MonadIntrospect (Fix1T t m )
77+ deriving instance MonadStore (t (Fix1T t m ) m ) => MonadStore (Fix1T t m )
7378
7479type MonadFix1T t m = (MonadTrans (Fix1T t ), Monad (t (Fix1T t m ) m ))
7580
@@ -84,10 +89,6 @@ instance (MonadFix1T t m, MonadAtomicRef m) => MonadAtomicRef (Fix1T t m) where
8489
8590instance (MonadFix1T t m , MonadFail (Fix1T t m ), MonadFile m ) => MonadFile (Fix1T t m )
8691
87- instance (MonadFix1T t m , MonadStore m ) => MonadStore (Fix1T t m ) where
88- addToStore a b c d = lift $ addToStore a b c d
89- addTextToStore' a b c d = lift $ addTextToStore' a b c d
90-
9192{- -----------------------------------------------------------------------}
9293
9394newtype StdCited m a = StdCited
@@ -192,9 +193,17 @@ instance ( MonadAtomicRef m
192193-- whileForcingThunk frame =
193194-- withFrame Debug (ForcingThunk @t @f @m) . withFrame Debug frame
194195
196+ -- MonadStoreT lacks some of these, needed in the deriving clause of StandardTF
197+ deriving instance MonadPlus m => MonadPlus (MonadStoreT m )
198+ deriving instance MonadFix m => MonadFix (MonadStoreT m )
199+ deriving instance MonadCatch m => MonadCatch (MonadStoreT m )
200+ deriving instance MonadThrow m => MonadThrow (MonadStoreT m )
201+ deriving instance MonadMask m => MonadMask (MonadStoreT m )
202+
195203newtype StandardTF r m a
196204 = StandardTF (ReaderT (Context r (StdValue r ))
197- (StateT (HashMap FilePath NExprLoc , HashMap Text Text ) m ) a )
205+ (StateT (HashMap FilePath NExprLoc , HashMap Text Text )
206+ (MonadStoreT m )) a )
198207 deriving
199208 ( Functor
200209 , Applicative
@@ -211,8 +220,12 @@ newtype StandardTF r m a
211220 , MonadState (HashMap FilePath NExprLoc , HashMap Text Text )
212221 )
213222
223+ instance (MonadIO m ) => MonadStore (StandardTF r m ) where
224+ addToStore a b d c = StandardTF $ lift $ lift $ addToStore a b c d
225+ addTextToStore a b c d = StandardTF $ lift $ lift $ addTextToStore a b c d
226+
214227instance MonadTrans (StandardTF r ) where
215- lift = StandardTF . lift . lift
228+ lift = StandardTF . lift . lift . lift
216229
217230instance (MonadPutStr r , MonadPutStr m ) => MonadPutStr (StandardTF r m )
218231instance (MonadHttp r , MonadHttp m ) => MonadHttp (StandardTF r m )
@@ -222,6 +235,7 @@ instance (MonadInstantiate r, MonadInstantiate m) => MonadInstantiate (StandardT
222235instance (MonadExec r , MonadExec m ) => MonadExec (StandardTF r m )
223236instance (MonadIntrospect r , MonadIntrospect m ) => MonadIntrospect (StandardTF r m )
224237
238+
225239{- -----------------------------------------------------------------------}
226240
227241type StandardT m = Fix1T StandardTF m
@@ -233,25 +247,29 @@ instance MonadThunkId m => MonadThunkId (Fix1T StandardTF m) where
233247 type ThunkId (Fix1T StandardTF m ) = ThunkId m
234248
235249mkStandardT
236- :: ReaderT
237- (Context (StandardT m ) (StdValue (StandardT m )))
238- (StateT (HashMap FilePath NExprLoc , Data.HashMap.Strict. HashMap Text Text ) m )
239- a
250+ :: (ReaderT (Context (StandardT m ) (StdValue (StandardT m )))
251+ (StateT (HashMap FilePath NExprLoc , Data.HashMap.Strict. HashMap Text Text )
252+ (MonadStoreT m )) a )
240253 -> StandardT m a
241254mkStandardT = Fix1T . StandardTF
242255
243256runStandardT
244257 :: StandardT m a
245- -> ReaderT
246- (Context (StandardT m ) (StdValue (StandardT m )))
247- (StateT (HashMap FilePath NExprLoc , Data.HashMap.Strict. HashMap Text Text ) m )
248- a
258+ -> (ReaderT (Context (StandardT m ) (StdValue (StandardT m )))
259+ (StateT (HashMap FilePath NExprLoc , Data.HashMap.Strict. HashMap Text Text )
260+ (MonadStoreT m )) a )
249261runStandardT (Fix1T (StandardTF m)) = m
250262
263+ runStoreSimple :: (MonadIO m , MonadBaseControl IO m ) => MonadStoreT m a -> m a
264+ runStoreSimple action = do
265+ (res, _log) <- runStore action
266+ -- TODO: replace this error call by something smarter. throwE ? throwError ?
267+ either (error ) return res
268+
251269runWithBasicEffects
252- :: (MonadIO m , MonadAtomicRef m ) => Options -> StandardT (StdIdT m ) a -> m a
270+ :: (MonadBaseControl IO m , MonadIO m , MonadAtomicRef m ) => Options -> StandardT (StdIdT m ) a -> m a
253271runWithBasicEffects opts =
254- go . (`evalStateT` mempty ) . (`runReaderT` newContext opts) . runStandardT
272+ go . runStoreSimple . (`evalStateT` mempty ) . (`runReaderT` newContext opts) . runStandardT
255273 where
256274 go action = do
257275 i <- newVar (1 :: Int )
0 commit comments