greskell-2.0.3.5: src/Data/Greskell/GTraversal/Gen.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
-- | __This module is experimental. It may have breaking changes in future.__
--
-- This module has Gremlin traversals defined in 'Data.Greskell.GTraversal' generalized on the
-- walk type. It may save you from calling 'liftWalk' manually.
--
-- @since 2.0.3.0
module Data.Greskell.GTraversal.Gen
( -- * Types
-- ** GraphTraversal and others
GTraversal (..)
, GraphTraversal
, ToGTraversal (..)
, Walk
, GraphTraversalSource
-- ** Walk types
, WalkType
, Filter
, Transform
, SideEffect
, Lift
, Split
-- * GraphTraversalSource
, source
, sV
, sV'
, sE
, sE'
, sAddV
, sAddV'
-- * GTraversal
, (&.)
, ($.)
, (<$.>)
, (<*.>)
, gIterate
, unsafeGTraversal
-- * Walk/Steps
, unsafeWalk
, modulateWith
-- ** Filter steps
, gIdentity
, gFilter
, gCyclicPath
, gSimplePath
-- ** Is step
, gIs
, gIsP
-- ** Has steps
, gHas1
, gHas2
, gHas2P
, gHasLabel
, gHasLabelP
, gHasId
, gHasIdP
, gHasKey
, gHasKeyP
, gHasValue
, gHasValueP
-- ** Logic steps
, gAnd
, gOr
, gNot
-- ** Where step
, gWhereP1
, gWhereP2
-- ** Sorting steps
, gOrder
-- ** Paging steps
, gRange
, gLimit
, gTail
, gSkip
-- ** Repeat step
, gRepeat
, gTimes
, gUntilHead
, gUntilTail
, gEmitHead
, gEmitTail
, gEmitHeadT
, gEmitTailT
, gLoops
, RepeatUntil (..)
, RepeatEmit (..)
, RepeatPos (..)
, RepeatLabel (..)
-- ** Branching steps
, gLocal
, gUnion
, gCoalesce
, gChoose3
-- ** Barrier steps
, gBarrier
, gDedup
, gDedupN
-- ** Transformation steps
, gFlatMap
, gV
, gV'
, gConstant
, gProject
-- ** As step
, gAs
-- ** Accessor steps
, gValues
, gProperties
, gId
, gLabel
, gValueMap
, gElementMap
, gSelect1
, gSelectN
, gSelectBy1
, gSelectByN
, gUnfold
, gPath
, gPathBy
-- ** Summarizing steps
, gFold
, gCount
-- ** Graph traversal steps
, gOut
, gOut'
, gOutE
, gOutE'
, gOutV
, gOutV'
, gIn
, gIn'
, gInE
, gInE'
, gInV
, gInV'
-- ** Match step
, gMatch
, MatchPattern (..)
, mPattern
, MatchResult
-- ** Side-effect steps
, gSideEffect
-- ** Graph manipulation steps
, gAddV
, gAddV'
, gAddE
, gAddE'
, AddAnchor
, gFrom
, gTo
, gDrop
, gDropP
, gProperty
, gPropertyV
-- ** @.by@ steps
, ByProjection (..)
, ProjectionLike (..)
, ByComparator (..)
, LabeledByProjection (..)
, gBy
, gBy1
, gBy2
, gByL
) where
import Data.Text (Text)
import Data.Greskell.AsIterator (AsIterator (IteratorItem))
import Data.Greskell.AsLabel (AsLabel, LabeledP, SelectedMap)
import Data.Greskell.Graph (AEdge, AVertex, Cardinality, Edge, Element (..),
ElementID, Key, KeyValue, Keys, Path, Property, Vertex)
import Data.Greskell.GraphSON (GValue)
import Data.Greskell.Greskell (Greskell)
import Data.Greskell.GTraversal (AddAnchor, ByComparator (..), ByProjection (..), Filter,
GTraversal (..), GraphTraversal, GraphTraversalSource,
LabeledByProjection (..), Lift, MatchPattern (..),
MatchResult, ProjectionLike (..), RepeatEmit (..),
RepeatLabel (..), RepeatPos (..), RepeatUntil (..),
SideEffect, Split, ToGTraversal (..), Transform, Walk,
WalkType, gAnd, gBarrier, gBy, gBy1, gBy2, gByL,
gChoose3, gCoalesce, gCyclicPath, gEmitHead, gEmitHeadT,
gEmitTail, gEmitTailT, gFilter, gFlatMap, gHas1, gHas2,
gHas2P, gHasId, gHasIdP, gHasKey, gHasKeyP, gHasLabel,
gHasLabelP, gHasValue, gHasValueP, gIdentity, gIs, gIsP,
gIterate, gLocal, gNot, gOr, gRepeat, gSideEffect,
gSimplePath, gTimes, gUnion, gUntilHead, gUntilTail,
gWhereP1, gWhereP2, mPattern, modulateWith, source,
unsafeGTraversal, unsafeWalk, ($.), (&.), (<$.>), (<*.>))
import qualified Data.Greskell.GTraversal as G
import Data.Greskell.Logic (Logic)
import Data.Greskell.PMap (PMap, Single)
sV :: (Vertex v, WalkType c, Lift Transform c) => [Greskell (ElementID v)] -> Greskell GraphTraversalSource -> GTraversal c () v
sV a b = liftWalk $ G.sV a b
sV' :: (WalkType c, Lift Transform c) => [Greskell (ElementID AVertex)] -> Greskell GraphTraversalSource -> GTraversal c () AVertex
sV' = sV
sE :: (Edge e, WalkType c, Lift Transform c) => [Greskell (ElementID e)] -> Greskell GraphTraversalSource -> GTraversal c () e
sE a b = liftWalk $ G.sE a b
sE' :: (WalkType c, Lift Transform c) => [Greskell (ElementID AEdge)] -> Greskell GraphTraversalSource -> GTraversal c () AEdge
sE' = sE
sAddV :: (Vertex v, WalkType c, Lift SideEffect c) => Greskell Text -> Greskell GraphTraversalSource -> GTraversal c () v
sAddV a b = liftWalk $ G.sAddV a b
sAddV' :: (WalkType c, Lift SideEffect c) => Greskell Text -> Greskell GraphTraversalSource -> GTraversal c () AVertex
sAddV' = sAddV
gOrder :: (WalkType c, Lift Transform c) => [ByComparator s] -> Walk c s s
gOrder b = liftWalk $ G.gOrder b
gRange :: (WalkType c, Lift Transform c) => Greskell Int -> Greskell Int -> Walk c s s
gRange a b = liftWalk $ G.gRange a b
gLimit :: (WalkType c, Lift Transform c) => Greskell Int -> Walk c s s
gLimit a = liftWalk $ G.gLimit a
gTail :: (WalkType c, Lift Transform c) => Greskell Int -> Walk c s s
gTail a = liftWalk $ G.gTail a
gSkip :: (WalkType c, Lift Transform c) => Greskell Int -> Walk c s s
gSkip a = liftWalk $ G.gSkip a
gLoops :: (WalkType c, Lift Transform c) => Maybe RepeatLabel -> Walk c s Int
gLoops a = liftWalk $ G.gLoops a
gDedup :: (WalkType c, Lift Transform c) => Maybe (ByProjection s e) -> Walk c s s
gDedup a = liftWalk $ G.gDedup a
gDedupN :: (WalkType c, Lift Transform c) => AsLabel a -> [AsLabel a] -> Maybe (ByProjection a e) -> Walk c s s
gDedupN a b c = liftWalk $ G.gDedupN a b c
gV :: (Vertex v, WalkType c, Lift Transform c) => [Greskell (ElementID v)] -> Walk c s v
gV a = liftWalk $ G.gV a
gV' :: (WalkType c, Lift Transform c) => [Greskell (ElementID AVertex)] -> Walk c s AVertex
gV' = gV
gConstant :: (WalkType c, Lift Transform c) => Greskell a -> Walk c s a
gConstant a = liftWalk $ G.gConstant a
gProject :: (WalkType c, Lift Transform c) => LabeledByProjection s -> [LabeledByProjection s] -> Walk c s (PMap Single GValue)
gProject a b = liftWalk $ G.gProject a b
gAs :: (WalkType c, Lift Transform c) => AsLabel a -> Walk c a a
gAs a = liftWalk $ G.gAs a
gValues :: (Element s, WalkType c, Lift Transform c) => [Key s e] -> Walk c s e
gValues a = liftWalk $ G.gValues a
gProperties :: (Element s, Property p, ElementProperty s ~ p, WalkType c, Lift Transform c) => [Key s v] -> Walk c s (p v)
gProperties a = liftWalk $ G.gProperties a
gId :: (Element s, WalkType c, Lift Transform c) => Walk c s (ElementID s)
gId = liftWalk G.gId
gLabel :: (Element s, WalkType c, Lift Transform c) => Walk c s Text
gLabel = liftWalk G.gLabel
gValueMap :: (Element s, WalkType c, Lift Transform c) => Keys s -> Walk c s (PMap (ElementPropertyContainer s) GValue)
gValueMap a = liftWalk $ G.gValueMap a
gElementMap :: (Element s, WalkType c, Lift Transform c) => Keys s -> Walk c s (PMap Single GValue)
gElementMap a = liftWalk $ G.gElementMap a
gSelect1 :: (WalkType c, Lift Transform c) => AsLabel a -> Walk c s a
gSelect1 a = liftWalk $ G.gSelect1 a
gSelectN :: (WalkType c, Lift Transform c) => AsLabel a -> AsLabel b -> [AsLabel c] -> Walk c s (SelectedMap GValue)
gSelectN a b c = liftWalk $ G.gSelectN a b c
gSelectBy1 :: (WalkType c, Lift Transform c) => AsLabel a -> ByProjection a b -> Walk c s b
gSelectBy1 a b = liftWalk $ G.gSelectBy1 a b
gSelectByN :: (WalkType c, Lift Transform c) => AsLabel a -> AsLabel a -> [AsLabel a] -> ByProjection a b -> Walk c s (SelectedMap b)
gSelectByN a b c d = liftWalk $ G.gSelectByN a b c d
gUnfold :: (AsIterator a, WalkType c, Lift Transform c) => Walk c a (IteratorItem a)
gUnfold = liftWalk $ G.gUnfold
gPath :: (WalkType c, Lift Transform c) => Walk c s (Path GValue)
gPath = liftWalk $ G.gPath
gPathBy :: (WalkType c, Lift Transform c) => ByProjection a b -> [ByProjection a b] -> Walk c s (Path b)
gPathBy a b = liftWalk $ G.gPathBy a b
gFold :: (WalkType c, Lift Transform c) => Walk c a [a]
gFold = liftWalk $ G.gFold
gCount :: (WalkType c, Lift Transform c) => Walk c a Int
gCount = liftWalk $ G.gCount
gOut :: (Vertex v1, Vertex v2, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v1 v2
gOut a = liftWalk $ G.gOut a
gOut' :: (Vertex v, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v AVertex
gOut' = gOut
gOutE :: (Vertex v, Edge e, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v e
gOutE a = liftWalk $ G.gOutE a
gOutE' :: (Vertex v, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v AEdge
gOutE' = gOutE
gOutV :: (Edge e, Vertex v, WalkType c, Lift Transform c) => Walk c e v
gOutV = liftWalk $ G.gOutV
gOutV' :: (Edge e, WalkType c, Lift Transform c) => Walk c e AVertex
gOutV' = gOutV
gIn :: (Vertex v1, Vertex v2, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v1 v2
gIn a = liftWalk $ G.gIn a
gIn' :: (Vertex v, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v AVertex
gIn' = gIn
gInE :: (Vertex v, Edge e, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v e
gInE a = liftWalk $ G.gInE a
gInE' :: (Vertex v, WalkType c, Lift Transform c) => [Greskell Text] -> Walk c v AEdge
gInE' = gInE
gInV :: (Edge e, Vertex v, WalkType c, Lift Transform c) => Walk c e v
gInV = liftWalk $ G.gInV
gInV' :: (Edge e, WalkType c, Lift Transform c) => Walk c e AVertex
gInV' = gInV
gMatch :: (WalkType c, Lift Transform c) => Logic MatchPattern -> Walk c a MatchResult
gMatch a = liftWalk $ G.gMatch a
gAddV :: (Vertex v, WalkType c, Lift SideEffect c) => Greskell Text -> Walk c a v
gAddV a = liftWalk $ G.gAddV a
gAddV' :: (WalkType c, Lift SideEffect c) => Greskell Text -> Walk c a AVertex
gAddV' = gAddV
gAddE :: (Vertex vs, Vertex ve, Edge e, WalkType c, Lift SideEffect c) => Greskell Text -> AddAnchor vs ve -> Walk c vs e
gAddE a b = liftWalk $ G.gAddE a b
gAddE' :: (WalkType c, Lift SideEffect c) => Greskell Text -> AddAnchor AVertex AVertex -> Walk c AVertex AEdge
gAddE' = gAddE
gFrom :: (ToGTraversal g, WalkType c, Lift c Transform) => g c s e -> AddAnchor s e
gFrom a = G.gFrom $ liftWalk a
gTo :: (ToGTraversal g, WalkType c, Lift c Transform) => g c s e -> AddAnchor s e
gTo a = G.gTo $ liftWalk a
gDrop :: (Element e, WalkType c, Lift SideEffect c) => Walk c e e
gDrop = liftWalk G.gDrop
gDropP :: (Property p, WalkType c, Lift SideEffect c) => Walk c (p a) (p a)
gDropP = liftWalk G.gDropP
gProperty :: (Element e, WalkType c, Lift SideEffect c) => Key e v -> Greskell v -> Walk c e e
gProperty a b = liftWalk $ G.gProperty a b
gPropertyV :: (Vertex e, vp ~ ElementProperty e, Property vp, Element (vp v), WalkType c, Lift SideEffect c)
=> Maybe (Greskell Cardinality) -> Key e v -> Greskell v -> [KeyValue (vp v)] -> Walk c e e
gPropertyV a b c d = liftWalk $ G.gPropertyV a b c d