Maintainer | Toshio Ito <debug.ito@gmail.com> |
---|---|
Safe Haskell | None |
Language | Haskell2010 |
This module defines types for parsing a "g:Map" GraphSON
object. Usually users only have to use GMapEntry
, because other
types are just used internally to implement GraphSON parsers.
Since: 0.1.2.0
Synopsis
- newtype FlattenedMap c k v = FlattenedMap {
- unFlattenedMap :: c k v
- parseToFlattenedMap :: (IsList (c k v), Item (c k v) ~ (k, v)) => (s -> Parser k) -> (s -> Parser v) -> Vector s -> Parser (FlattenedMap c k v)
- data GMap c k v = GMap {}
- unGMap :: GMap c k v -> c k v
- singleton :: (IsList (c k v), Item (c k v) ~ (k, v)) => GMapEntry k v -> GMap c k v
- toList :: (IsList (c k v), Item (c k v) ~ (k, v)) => GMap c k v -> [GMapEntry k v]
- parseToGMap :: (IsList (c k v), Item (c k v) ~ (k, v)) => (s -> Parser k) -> (s -> Parser v) -> (HashMap Text s -> Parser (c k v)) -> Either (HashMap Text s) (Vector s) -> Parser (GMap c k v)
- data GMapEntry k v = GMapEntry {
- gmapEntryFlat :: !Bool
- gmapEntryKey :: !k
- gmapEntryValue :: !v
- unGMapEntry :: GMapEntry k v -> (k, v)
- parseToGMapEntry :: FromJSONKey k => (s -> Parser k) -> (s -> Parser v) -> Either (HashMap Text s) (Vector s) -> Parser (GMapEntry k v)
FlattenedMap
newtype FlattenedMap c k v Source #
JSON encoding of a map as an array of flattened key-value pairs.
ToJSON
instance of this type encodes the internal map as an array
of keys and values. FromJSON
instance of this type parses that
flattened map.
- type
c
: container type for a map (e.g.Map
andHashMap
). - type
k
: key of the map. - type
v
: value of the map.
>>>
let decode s = Aeson.eitherDecode s :: Either String (FlattenedMap HashMap Int String)
>>>
let toSortedList = sort . HashMap.toList . unFlattenedMap
>>>
fmap toSortedList $ decode "[10, \"ten\", 11, \"eleven\"]"
Right [(10,"ten"),(11,"eleven")]>>>
fmap toSortedList $ decode "[]"
Right []>>>
let (Left err_msg) = decode "[10, \"ten\", 11]"
>>>
err_msg
...odd number of elements...>>>
Aeson.encode $ FlattenedMap $ (HashMap.fromList [(10, "ten")] :: HashMap Int String)
"[10,\"ten\"]"
FlattenedMap | |
|
Instances
:: (IsList (c k v), Item (c k v) ~ (k, v)) | |
=> (s -> Parser k) | key parser |
-> (s -> Parser v) | value parser |
-> Vector s | input vector of flattened key-values. |
-> Parser (FlattenedMap c k v) |
General parser for FlattenedMap
.
GMap
Haskell representation of g:Map
type.
GraphSON v1 and v2 encode Java Map
type as a JSON Object, while
GraphSON v3 encodes it as an array of flattened keys and values
(like FlattenedMap
.) GMap
type handles both encoding schemes.
- type
c
: container type for a map (e.g.Map
andHashMap
). - type
k
: key of the map. - type
v
: value of the map.
>>>
Aeson.eitherDecode "{\"ten\": 10}" :: Either String (GMap HashMap Text Int)
Right (GMap {gmapFlat = False, gmapValue = fromList [("ten",10)]})>>>
Aeson.eitherDecode "[\"ten\", 10]" :: Either String (GMap HashMap Text Int)
Right (GMap {gmapFlat = True, gmapValue = fromList [("ten",10)]})>>>
Aeson.encode $ GMap False (HashMap.fromList [(9, "nine")] :: HashMap Int Text)
"{\"9\":\"nine\"}">>>
Aeson.encode $ GMap True (HashMap.fromList [(9, "nine")] :: HashMap Int Text)
"[9,\"nine\"]"
Instances
Functor (c k) => Functor (GMap c k) Source # | |
Foldable (c k) => Foldable (GMap c k) Source # | |
Defined in Data.Greskell.GMap fold :: Monoid m => GMap c k m -> m # foldMap :: Monoid m => (a -> m) -> GMap c k a -> m # foldr :: (a -> b -> b) -> b -> GMap c k a -> b # foldr' :: (a -> b -> b) -> b -> GMap c k a -> b # foldl :: (b -> a -> b) -> b -> GMap c k a -> b # foldl' :: (b -> a -> b) -> b -> GMap c k a -> b # foldr1 :: (a -> a -> a) -> GMap c k a -> a # foldl1 :: (a -> a -> a) -> GMap c k a -> a # elem :: Eq a => a -> GMap c k a -> Bool # maximum :: Ord a => GMap c k a -> a # minimum :: Ord a => GMap c k a -> a # | |
Traversable (c k) => Traversable (GMap c k) Source # | |
Eq (c k v) => Eq (GMap c k v) Source # | |
Show (c k v) => Show (GMap c k v) Source # | |
(ToJSON k, ToJSON v, IsList (c k v), Item (c k v) ~ (k, v), ToJSON (c k v)) => ToJSON (GMap c k v) Source # | |
Defined in Data.Greskell.GMap | |
(FromJSON k, FromJSON v, IsList (c k v), Item (c k v) ~ (k, v), FromJSON (c k v)) => FromJSON (GMap c k v) Source # | Use |
GraphSONTyped (GMap c k v) Source # | Map to "g:Map". |
Defined in Data.Greskell.GMap gsonTypeFor :: GMap c k v -> Text Source # | |
(FromGraphSON k, FromGraphSON v, IsList (c k v), Item (c k v) ~ (k, v), Traversable (c k), FromJSON (c k GValue)) => FromGraphSON (GMap c k v) Source # | Use |
Defined in Data.Greskell.GraphSON | |
AsIterator (GMap c k v) Source # | |
Defined in Data.Greskell.AsIterator type IteratorItem (GMap c k v) :: Type Source # | |
type IteratorItem (GMap c k v) Source # | |
Defined in Data.Greskell.AsIterator |
:: (IsList (c k v), Item (c k v) ~ (k, v)) | |
=> (s -> Parser k) | key parser |
-> (s -> Parser v) | value parser |
-> (HashMap Text s -> Parser (c k v)) | object parser |
-> Either (HashMap Text s) (Vector s) | input object or flattened key-values. |
-> Parser (GMap c k v) |
General parser for GMap
.
GMapEntry
Haskell representation of Map.Entry
type.
Basically GraphSON encodes Java's Map.Entry
type as if it were a
Map
with a single entry. Thus its encoded form is either a JSON
object or a flattened key-values, as explained in GMap
.
>>>
Aeson.eitherDecode "{\"1\": \"one\"}" :: Either String (GMapEntry Int Text)
Right (GMapEntry {gmapEntryFlat = False, gmapEntryKey = 1, gmapEntryValue = "one"})>>>
Aeson.eitherDecode "[1, \"one\"]" :: Either String (GMapEntry Int Text)
Right (GMapEntry {gmapEntryFlat = True, gmapEntryKey = 1, gmapEntryValue = "one"})>>>
Aeson.encode (GMapEntry False "one" 1 :: GMapEntry Text Int)
"{\"one\":1}">>>
Aeson.encode (GMapEntry True "one" 1 :: GMapEntry Text Int)
"[\"one\",1]"
In old versions of TinkerPop, Map.Entry
is encoded as a JSON
object with "key" and "value" fields. FromJSON
instance of
GMapEntry
supports this format as well, but ToJSON
instance
doesn't support it.
>>>
Aeson.eitherDecode "{\"key\":1, \"value\": \"one\"}" :: Either String (GMapEntry Int Text)
Right (GMapEntry {gmapEntryFlat = False, gmapEntryKey = 1, gmapEntryValue = "one"})
GMapEntry | |
|
Instances
unGMapEntry :: GMapEntry k v -> (k, v) Source #
Get the key-value pair from GMapEntry
.