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