morpheus-graphql-core: Morpheus GraphQL Core

[ graphql, library, mit, web ] [ Propose Tags ]

Build GraphQL APIs with your favourite functional language!


[Skip to Readme]
Versions [faq] 0.12.0
Change log changelog.md
Dependencies aeson (>=1.4.4.0 && <=1.6), base (>=4.7 && <5), bytestring (>=0.10.4 && <0.11), hashable (>=1.0.0), megaparsec (>=7.0.0 && <9.0.0), scientific (>=0.3.6.2 && <0.4), template-haskell (>=2.0 && <=3.0), text (>=1.2.3.0 && <1.3), th-lift-instances (>=0.1.1 && <=0.3), transformers (>=0.3.0.0 && <0.6), unordered-containers (>=0.2.8.0 && <0.3), vector (>=0.12.0.1 && <0.13) [details]
License MIT
Copyright (c) 2019 Daviti Nalchevanidze
Author Daviti Nalchevanidze
Maintainer d.nalchevanidze@gmail.com
Category web, graphql
Home page https://morpheusgraphql.com
Bug tracker https://github.com/nalchevanidze/morpheus-graphql/issues
Source repo head: git clone https://github.com/nalchevanidze/morpheus-graphql
Uploaded by nalchevanidze at 2020-05-21T22:10:13Z
Distributions
Downloads 21 total (21 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2020-05-21 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for morpheus-graphql-core-0.12.0

[back to package description]

Morpheus GraphQL Core

core Functionalities of Morpheus GraphQL, can be used to build GraphQL server, client ..

  • parser
  • validar
  • api

Build GraphQL api with Core

getSchema :: Monad m => ResponseStream e m Schema
getSchema =
  fromList
    [dsl|
  type Query {
    deity(name: String): Deity!
  }

  type Deity {
    name: String!
    power: [String!]!
  }
|]

resolver :: Monad m => RootResModel e m
resolver =
  RootResModel
    { query =
        pure $
          mkObject
            "Query"
            [("deity", resolveDeity)],
      mutation = pure mkNull,
      subscription = pure mkNull
    }

resolveDeity :: (WithOperation o, Monad m) => Resolver o e m (ResModel o e m)
resolveDeity =
  pure $
    mkObject
      "Deity"
      [ ("name", pure $ mkString "Morpheus"),
        ("power", pure $ mkList [mkString "Shapeshifting"])
      ]

api :: GQLRequest -> ResponseStream e Identity (Value VALID)
api request = do
  schema <- getSchema
  runApi schema resolver request