Provide a custom Show instance for output Value
This commit is contained in:
parent
dd6fdf69f6
commit
cc8f14f122
@ -6,6 +6,11 @@ The format is based on
|
|||||||
and this project adheres to
|
and this project adheres to
|
||||||
[Haskell Package Versioning Policy](https://pvp.haskell.org/).
|
[Haskell Package Versioning Policy](https://pvp.haskell.org/).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
### Fixed
|
||||||
|
- Provide a custom `Show` instance for `Type.Definition.Value` (for error
|
||||||
|
messages).
|
||||||
|
|
||||||
## [1.0.0.0]
|
## [1.0.0.0]
|
||||||
### Added
|
### Added
|
||||||
- `Language.GraphQL.Execute.OrderedMap` is a map data structure, that preserves
|
- `Language.GraphQL.Execute.OrderedMap` is a map data structure, that preserves
|
||||||
@ -443,6 +448,7 @@ and this project adheres to
|
|||||||
### Added
|
### Added
|
||||||
- Data types for the GraphQL language.
|
- Data types for the GraphQL language.
|
||||||
|
|
||||||
|
[Unreleased]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v1.0.0.0&rev_to=master
|
||||||
[1.0.0.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v1.0.0.0&rev_to=v0.11.1.0
|
[1.0.0.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v1.0.0.0&rev_to=v0.11.1.0
|
||||||
[0.11.1.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v0.11.1.0&rev_to=v0.11.0.0
|
[0.11.1.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v0.11.1.0&rev_to=v0.11.0.0
|
||||||
[0.11.0.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v0.11.0.0&rev_to=v0.10.0.0
|
[0.11.0.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v0.11.0.0&rev_to=v0.10.0.0
|
||||||
|
@ -20,10 +20,12 @@ module Language.GraphQL.Type.Definition
|
|||||||
import Data.Int (Int32)
|
import Data.Int (Int32)
|
||||||
import Data.HashMap.Strict (HashMap)
|
import Data.HashMap.Strict (HashMap)
|
||||||
import qualified Data.HashMap.Strict as HashMap
|
import qualified Data.HashMap.Strict as HashMap
|
||||||
|
import Data.List (intercalate)
|
||||||
import Data.String (IsString(..))
|
import Data.String (IsString(..))
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as Text
|
import qualified Data.Text as Text
|
||||||
import Language.GraphQL.AST (Name)
|
import Language.GraphQL.AST (Name, escape)
|
||||||
|
import Numeric (showFloat)
|
||||||
import Prelude hiding (id)
|
import Prelude hiding (id)
|
||||||
|
|
||||||
-- | Represents accordingly typed GraphQL values.
|
-- | Represents accordingly typed GraphQL values.
|
||||||
@ -36,7 +38,27 @@ data Value
|
|||||||
| Enum Name
|
| Enum Name
|
||||||
| List [Value] -- ^ Arbitrary nested list.
|
| List [Value] -- ^ Arbitrary nested list.
|
||||||
| Object (HashMap Name Value)
|
| Object (HashMap Name Value)
|
||||||
deriving (Eq, Show)
|
deriving Eq
|
||||||
|
|
||||||
|
instance Show Value where
|
||||||
|
showList = mappend . showList'
|
||||||
|
where
|
||||||
|
showList' list = "[" ++ intercalate ", " (show <$> list) ++ "]"
|
||||||
|
show (Int integer) = show integer
|
||||||
|
show (Float float') = showFloat float' mempty
|
||||||
|
show (String text) = "\"" <> Text.foldr (mappend . escape) "\"" text
|
||||||
|
show (Boolean boolean') = show boolean'
|
||||||
|
show Null = "null"
|
||||||
|
show (Enum name) = Text.unpack name
|
||||||
|
show (List list) = show list
|
||||||
|
show (Object fields) = unwords
|
||||||
|
[ "{"
|
||||||
|
, intercalate ", " (HashMap.foldrWithKey showObject [] fields)
|
||||||
|
, "}"
|
||||||
|
]
|
||||||
|
where
|
||||||
|
showObject key value accumulator =
|
||||||
|
concat [Text.unpack key, ": ", show value] : accumulator
|
||||||
|
|
||||||
instance IsString Value where
|
instance IsString Value where
|
||||||
fromString = String . fromString
|
fromString = String . fromString
|
||||||
|
Loading…
Reference in New Issue
Block a user