diff --git a/lib/GEODE/Metadata/SplitContext.hs b/lib/GEODE/Metadata/SplitContext.hs index 7ea4d6e7089929f1a82d86c9098accb8cc024995..432357889d3db549abbcdbc59c12ed6ebe30090e 100644 --- a/lib/GEODE/Metadata/SplitContext.hs +++ b/lib/GEODE/Metadata/SplitContext.hs @@ -12,6 +12,8 @@ module GEODE.Metadata.SplitContext , runSplitT ) where import Control.Monad.Identity (Identity(..)) +import Control.Monad.IO.Class (MonadIO(..)) +import Control.Monad.Trans (MonadTrans(..)) import Data.Map as Map (Map, (!?), delete, empty, insert) import Data.Text (Text) @@ -68,6 +70,12 @@ instance Monad m => SplitContext (SplitContextT m) where context = SplitContextT $ \current -> pure (current, current) update f = SplitContextT $ \current -> pure ((), f current) +instance MonadTrans SplitContextT where + lift m = SplitContextT $ \current -> m >>= \a -> pure (a, current) + +instance MonadIO m => MonadIO (SplitContextT m) where + liftIO = lift . liftIO + next :: SplitContext m => Field a -> m Int next f@(HeadWord _) = lookupEdit f (Just . maybe 1 (+1)) >>= pure . maybe 0 id next Page = lookupEdit Page (+1)