summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/Trans.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/GraphQL/Trans.hs')
-rw-r--r--src/Language/GraphQL/Trans.hs16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/Language/GraphQL/Trans.hs b/src/Language/GraphQL/Trans.hs
index eb78911..4232e75 100644
--- a/src/Language/GraphQL/Trans.hs
+++ b/src/Language/GraphQL/Trans.hs
@@ -1,6 +1,7 @@
-- | Monad transformer stack used by the @GraphQL@ resolvers.
module Language.GraphQL.Trans
( ActionT(..)
+ , Context(Context)
) where
import Control.Applicative (Alternative(..))
@@ -8,10 +9,19 @@ import Control.Monad (MonadPlus(..))
import Control.Monad.IO.Class (MonadIO(..))
import Control.Monad.Trans.Class (MonadTrans(..))
import Control.Monad.Trans.Except (ExceptT)
+import Control.Monad.Trans.Reader (ReaderT)
+import Data.HashMap.Strict (HashMap)
import Data.Text (Text)
+import Language.GraphQL.AST.Core (Name, Value)
--- | Monad transformer stack used by the resolvers to provide error handling.
-newtype ActionT m a = ActionT { runActionT :: ExceptT Text m a }
+-- | Resolution context holds resolver arguments.
+newtype Context = Context (HashMap Name Value)
+
+-- | Monad transformer stack used by the resolvers to provide error handling
+-- and resolution context (resolver arguments).
+newtype ActionT m a = ActionT
+ { runActionT :: ExceptT Text (ReaderT Context m) a
+ }
instance Functor m => Functor (ActionT m) where
fmap f = ActionT . fmap f . runActionT
@@ -25,7 +35,7 @@ instance Monad m => Monad (ActionT m) where
(ActionT action) >>= f = ActionT $ action >>= runActionT . f
instance MonadTrans ActionT where
- lift = ActionT . lift
+ lift = ActionT . lift . lift
instance MonadIO m => MonadIO (ActionT m) where
liftIO = lift . liftIO