From 1050161cb7a200275e4896cad3a07bb843954916 Mon Sep 17 00:00:00 2001 From: Alice BRENON <alice.brenon@ens-lyon.fr> Date: Fri, 9 Jun 2023 15:23:58 +0200 Subject: [PATCH] Prove MonadTrans and MonadIO instances to ease composition with useful monads --- lib/GEODE/Metadata/SplitContext.hs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/GEODE/Metadata/SplitContext.hs b/lib/GEODE/Metadata/SplitContext.hs index 7ea4d6e..4323578 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) -- GitLab