diff options
| author | Eugen Wissner <belka@caraus.de> | 2020-07-17 07:05:03 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2020-07-17 07:05:03 +0200 |
| commit | 09135c581aaae471f7d964bc2a3a141bef299097 (patch) | |
| tree | bf26b907a13e5f358f91e4c2d7ef661e74fa6805 /src/Language/GraphQL/Execute.hs | |
| parent | e24386402be444e643d7d9c8ef82c1fe2205c7fc (diff) | |
| download | graphql-09135c581aaae471f7d964bc2a3a141bef299097.tar.gz | |
Constrain base monad to MonadCatch
Let's try MonadThrow/MonadCatch. It looks nice at a first glance. The
monad transformer stack contains only the ReaderT, less lifts are
required. Exception subtyping is easier, the user can (and should)
define custom error types and throw them. And it is still possible to
use pure error handling, if someone doesn't like runtime exceptions or
need to run a query in a pure environment.
Fixes #42.
Diffstat (limited to 'src/Language/GraphQL/Execute.hs')
| -rw-r--r-- | src/Language/GraphQL/Execute.hs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/Language/GraphQL/Execute.hs b/src/Language/GraphQL/Execute.hs index 08aa5ab..2b615f4 100644 --- a/src/Language/GraphQL/Execute.hs +++ b/src/Language/GraphQL/Execute.hs @@ -6,6 +6,7 @@ module Language.GraphQL.Execute , module Language.GraphQL.Execute.Coerce ) where +import Control.Monad.Catch (MonadCatch) import Data.HashMap.Strict (HashMap) import Data.Sequence (Seq(..)) import Data.Text (Text) @@ -25,7 +26,7 @@ import Language.GraphQL.Type.Schema -- -- Returns the result of the query against the schema wrapped in a /data/ -- field, or errors wrapped in an /errors/ field. -execute :: (Monad m, VariableValue a, Serialize b) +execute :: (MonadCatch m, VariableValue a, Serialize b) => Schema m -- ^ Resolvers. -> Maybe Text -- ^ Operation name. -> HashMap Name a -- ^ Variable substitution function. @@ -39,7 +40,7 @@ execute schema operationName subs document = $ Transform.queryError queryError Right transformed -> executeRequest transformed -executeRequest :: (Monad m, Serialize a) +executeRequest :: (MonadCatch m, Serialize a) => Transform.Document m -> m (Either (ResponseEventStream m a) (Response a)) executeRequest (Transform.Document types' rootObjectType operation) @@ -53,7 +54,7 @@ executeRequest (Transform.Document types' rootObjectType operation) -- This is actually executeMutation, but we don't distinguish between queries -- and mutations yet. -executeOperation :: (Monad m, Serialize a) +executeOperation :: (MonadCatch m, Serialize a) => HashMap Name (Type m) -> Out.ObjectType m -> Seq (Transform.Selection m) |
