greskell-1.0.0.1: Haskell binding for Gremlin graph query language

MaintainerToshio Ito <debug.ito@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Data.Greskell.Extra

Contents

Description

Extra utility functions implemented by Greskell.

Since: 0.2.3.0

Synopsis

Property readers

Re-export property readers.

Since: 1.0.0.0

lookupAs :: (PMapKey k, NonEmptyLike c, PMapValue k ~ a, FromGraphSON a) => k -> PMap c GValue -> Either PMapLookupException a Source #

Lookup the value and parse it into a.

lookupAs' :: (PMapKey k, NonEmptyLike c, PMapValue k ~ Maybe a, FromGraphSON a) => k -> PMap c GValue -> Either PMapLookupException (Maybe a) Source #

Similar to lookupAs, but this function converts a null result into Nothing.

A null result is either (1) the key k is not found in the map, or (2) the key is found, but the value is null.

lookupListAs :: (PMapKey k, NonEmptyLike c, PMapValue k ~ a, FromGraphSON a) => k -> PMap c GValue -> Either PMapLookupException (NonEmpty a) Source #

Look up the values and parse them into a.

lookupListAs' :: (PMapKey k, NonEmptyLike c, PMapValue k ~ Maybe a, FromGraphSON a) => k -> PMap c GValue -> Either PMapLookupException [Maybe a] Source #

Similar to lookupListAs, but this function accepts null results.

If the key k is not found in the map, it returns an empty list. If the key k is found and nulls are included in the values, they are obtained as Nothing.

pMapToFail :: MonadFail m => Either PMapLookupException a -> m a Source #

Convert the lookup result into a MonadFail. It fails with the description returned by pMapDecribeError.

Property writers

writeKeyValues :: Element e => [KeyValue e] -> Walk SideEffect e e Source #

Make a series of .property steps to write the given key-value pairs as properties. Use <=:> and <=?> to make a KeyValue within Binder.

>>> let keyAge = ("age" :: Key AVertex Int)
>>> let keyName = ("name" :: Key AVertex Text)
>>> let (walk, binding) = runBinder $ writeKeyValues <$> sequence [keyAge <=:> 21, keyName <=:> "Josh"]
>>> toGremlin walk
"__.property(\"age\",__v0).property(\"name\",__v1).identity()"
>>> sortBy (comparing fst) $ HashMap.toList binding
[("__v0",Number 21.0),("__v1",String "Josh")]

Since: 1.0.0.0

(<=:>) :: ToJSON b => Key a b -> b -> Binder (KeyValue a) Source #

Like =:, but this one takes a real value, binds it into a Greskell value and returns KeyValue.

Since: 1.0.0.0

(<=?>) :: ToJSON b => Key a (Maybe b) -> Maybe b -> Binder (KeyValue a) Source #

Like <=:>, but this one is for an optional property. If the value is Just, it's equivalent to <=:>. If the value is Nothing, it returns KeyNoValue.

>>> let keyNName = ("nickname" :: Key AVertex (Maybe Text))
>>> let keyCompany = ("company" :: Key AVertex (Maybe Text))
>>> let (walk, binding) = runBinder $ writeKeyValues <$> sequence [keyNName <=?> Nothing, keyCompany <=?> Just "foobar.com"]
>>> toGremlin walk
"__.property(\"company\",__v0).identity()"
>>> sortBy (comparing fst) $ HashMap.toList binding
[("__v0",String "foobar.com")]

Since: 1.0.0.0

writePropertyKeyValues :: (ToJSON v, Element e) => [(Text, v)] -> Binder (Walk SideEffect e e) Source #

Make a series of .property steps to write the given key-value pairs as properties.

>>> let binder = (writePropertyKeyValues [("age", (21 :: Int))] :: Binder (Walk SideEffect AVertex AVertex))
>>> let (walk, binding) = runBinder binder
>>> toGremlin walk
"__.property(\"age\",__v0).identity()"
>>> sortBy (comparing fst) $ HashMap.toList binding
[("__v0",Number 21.0)]

Since: 0.2.3.0

writePMapProperties :: (Foldable c, ToJSON v, Element e) => PMap c v -> Binder (Walk SideEffect e e) Source #

Make a series of .property steps to write all properties in the given PMap.

Since: 1.0.0.0