+{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Except
+#if __GLASGOW_HASKELL__ >= 806
+import qualified Control.Monad.Fail as Fail
+#endif
import Control.Monad.Trans.Reader (ReaderT, runReaderT)
import qualified Control.Monad.Trans.Reader as Reader (ask)
import Control.Monad.Trans.State (StateT, runStateT)
type ParserStateReader a s r m = ConduitParser a (StateT s (ReaderT r m))
+#if __GLASGOW_HASKELL__ >= 806
+instance (Fail.MonadFail m) => Fail.MonadFail (ParserStateReader a s r m) where
+ fail = Fail.fail
+#endif
+
runSession :: SessionContext -> SessionState -> Session a -> IO (a, SessionState)
runSession context state session = runReaderT (runStateT conduit state) context
where