hydra-0.1.1: src/main/haskell/Hydra/Impl/Haskell/Sources/Ext/Tinkerpop/V3.hs
{-# LANGUAGE OverloadedStrings #-}
module Hydra.Impl.Haskell.Sources.Ext.Tinkerpop.V3 where
import Hydra.Impl.Haskell.Sources.Core
import Hydra.Kernel
import Hydra.Impl.Haskell.Dsl.Types as Types
import Hydra.Impl.Haskell.Dsl.Standard
tinkerpopV3Module :: Module Meta
tinkerpopV3Module = Module ns elements [hydraCoreModule] $
Just "A simple TinkerPop version 3 syntax model"
where
ns = Namespace "hydra/ext/tinkerpop/v3"
core = nsref $ moduleNamespace hydraCoreModule
v3 = nsref ns
def = datatype ns
elements = [
def "Edge" $
doc "An edge" $
lambda "v" $ lambda "e" $ lambda "p" $
record [
"label">: v3 "EdgeLabel",
"id">: "e",
"out">: "v",
"in">: "v",
"properties">: Types.map (v3 "PropertyKey") "p"],
def "EdgeLabel" $
doc "The (required) label of an edge" $
string,
def "Element" $
doc "Either a vertex or an edge" $
lambda "v" $ lambda "e" $ lambda "p" $
union [
"vertex">: v3 "Vertex" @@ "v" @@ "p",
"edge">: v3 "Edge" @@ "v" @@ "e" @@ "p"],
def "Graph" $
doc "A graph; a self-contained collection of vertices and edges" $
lambda "v" $ lambda "e" $ lambda "p" $
record [
"vertices">: Types.set $ v3 "Vertex" @@ "v" @@ "p",
"edges">: Types.set $ v3 "Edge" @@ "v" @@ "e" @@ "p"],
def "Property" $
doc "A key/value property" $
lambda "p" $
record [
"key">: v3 "PropertyKey",
"value">: "p"],
def "PropertyKey" $
doc "A property key"
string,
def "Vertex" $
doc "A vertex" $
lambda "v" $ lambda "p" $
record [
"label">: v3 "VertexLabel",
"id">: "v",
"properties">: Types.map (v3 "PropertyKey") "p"],
def "VertexLabel" $
doc "The label of a vertex. The default (null) vertex is represented by the empty string" $
string]