hydra-pg 0.17.6 → 0.17.7
raw patch · 42 files changed
+164/−31 lines, 42 filesdep ~hydra-kerneldep ~hydra-rdfPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: hydra-kernel, hydra-rdf
API changes (from Hackage documentation)
+ Hydra.Graphviz.Coder: collectLetRefs :: SubtermPath -> TermNode -> [(Name, String)]
- Hydra.Dsl.Pg.Model: graph :: Ord v => TypedTerm (Map v (Vertex v)) -> TypedTerm (Map v (Edge v)) -> TypedTerm (Graph v)
+ Hydra.Dsl.Pg.Model: graph :: TypedTerm (Map v (Vertex v)) -> TypedTerm (Map v (Edge v)) -> TypedTerm (Graph v)
- Hydra.Dsl.Pg.Model: graphEdges :: Ord v => TypedTerm (Graph v) -> TypedTerm (Map v (Edge v))
+ Hydra.Dsl.Pg.Model: graphEdges :: TypedTerm (Graph v) -> TypedTerm (Map v (Edge v))
- Hydra.Dsl.Pg.Model: graphVertices :: Ord v => TypedTerm (Graph v) -> TypedTerm (Map v (Vertex v))
+ Hydra.Dsl.Pg.Model: graphVertices :: TypedTerm (Graph v) -> TypedTerm (Map v (Vertex v))
- Hydra.Dsl.Pg.Model: graphWithEdges :: Ord v => TypedTerm (Graph v) -> TypedTerm (Map v (Edge v)) -> TypedTerm (Graph v)
+ Hydra.Dsl.Pg.Model: graphWithEdges :: TypedTerm (Graph v) -> TypedTerm (Map v (Edge v)) -> TypedTerm (Graph v)
- Hydra.Dsl.Pg.Model: graphWithVertices :: Ord v => TypedTerm (Graph v) -> TypedTerm (Map v (Vertex v)) -> TypedTerm (Graph v)
+ Hydra.Dsl.Pg.Model: graphWithVertices :: TypedTerm (Graph v) -> TypedTerm (Map v (Vertex v)) -> TypedTerm (Graph v)
Files
- CHANGELOG.md +82/−0
- hydra-pg.cabal +3/−3
- src/main/haskell/Com/Gdblab/PathAlgebra/Expressions.hs +1/−0
- src/main/haskell/Com/Gdblab/PathAlgebra/Syntax.hs +1/−0
- src/main/haskell/Hydra/Cypher/Features.hs +1/−0
- src/main/haskell/Hydra/Cypher/OpenCypher.hs +1/−0
- src/main/haskell/Hydra/Decode/Neo4j/Model.hs +1/−0
- src/main/haskell/Hydra/Decode/Pg/Mapping.hs +1/−0
- src/main/haskell/Hydra/Decode/Pg/Model.hs +1/−0
- src/main/haskell/Hydra/Demos/Genpg/Transform.hs +1/−0
- src/main/haskell/Hydra/Dsl/Pg/Model.hs +6/−5
- src/main/haskell/Hydra/Encode/Neo4j/Model.hs +1/−0
- src/main/haskell/Hydra/Encode/Pg/Mapping.hs +1/−0
- src/main/haskell/Hydra/Encode/Pg/Model.hs +1/−0
- src/main/haskell/Hydra/Error/Neo4j.hs +1/−0
- src/main/haskell/Hydra/Error/Pg.hs +1/−0
- src/main/haskell/Hydra/Graphviz/Coder.hs +35/−23
- src/main/haskell/Hydra/Graphviz/Dot.hs +1/−0
- src/main/haskell/Hydra/Graphviz/Serde.hs +1/−0
- src/main/haskell/Hydra/Neo4j/Model.hs +1/−0
- src/main/haskell/Hydra/Neo4j/Pg.hs +1/−0
- src/main/haskell/Hydra/Pg/Coder.hs +1/−0
- src/main/haskell/Hydra/Pg/Graphson/Coder.hs +1/−0
- src/main/haskell/Hydra/Pg/Graphson/Construct.hs +1/−0
- src/main/haskell/Hydra/Pg/Graphson/Syntax.hs +1/−0
- src/main/haskell/Hydra/Pg/Graphson/Utils.hs +1/−0
- src/main/haskell/Hydra/Pg/Mapping.hs +1/−0
- src/main/haskell/Hydra/Pg/Model.hs +1/−0
- src/main/haskell/Hydra/Pg/Printing.hs +1/−0
- src/main/haskell/Hydra/Pg/Query.hs +1/−0
- src/main/haskell/Hydra/Pg/Rdf/Environment.hs +1/−0
- src/main/haskell/Hydra/Pg/Rdf/Mappings.hs +1/−0
- src/main/haskell/Hydra/Pg/TermsToElements.hs +1/−0
- src/main/haskell/Hydra/Pg/Utils.hs +1/−0
- src/main/haskell/Hydra/Print/Error/Pg.hs +1/−0
- src/main/haskell/Hydra/Tinkerpop/Examples/Modern.hs +1/−0
- src/main/haskell/Hydra/Tinkerpop/Features.hs +1/−0
- src/main/haskell/Hydra/Tinkerpop/Gremlin.hs +1/−0
- src/main/haskell/Hydra/Tinkerpop/Language.hs +1/−0
- src/main/haskell/Hydra/Validate/Neo4j.hs +1/−0
- src/main/haskell/Hydra/Validate/Pg.hs +1/−0
- src/main/haskell/OpenGql/Grammar.hs +1/−0
CHANGELOG.md view
@@ -15,6 +15,88 @@ --- +## [0.17.7] - 2026-09-14++Correctness-hardening point release on the 0.17.x line, consolidating the 0.17.6 breaking batch. It+closes a family of silent cross-host correctness bugs in the equality, ordering, integer-narrowing+and string primitives, and adds the systematic test coverage that exposed them. No kernel-surface+breaking changes.++### Highlights++- **Silent-wrong primitives corrected across hosts**+ ([#745](https://github.com/CategoricalData/hydra/issues/745),+ [#742](https://github.com/CategoricalData/hydra/issues/742)): new shared cross-host fixtures+ uncovered ~a dozen primitives (`equal`/`compare` on collections, float equality, `bigintToIntN`+ narrowing, `parseUint*` bounds, astral-plane string ops) that returned wrong results on one or more+ non-Haskell hosts while appearing to pass. All are now correct and verified per-host against the+ Haskell reference oracle.+- **Systematic test-coverage hardening**+ ([#749](https://github.com/CategoricalData/hydra/issues/749)): new kernel coverage for previously+ untested primitive behavior (equality/ordering collection depth, `notEqual`, `functions.const`/`flip`),+ which drove wiring those primitives into every host's default-implementation fallback.+- **Scale-preserving decimals across every lossy-double host**+ ([#727](https://github.com/CategoricalData/hydra/issues/727),+ [#719](https://github.com/CategoricalData/hydra/issues/719)): `Literal.decimal` gains a real+ scale-preserving representation (coefficient + scale) in the Scheme, Emacs Lisp, Common Lisp and+ TypeScript runtimes and coders, and the generated `Literal.Decimal` `equals`/`compareTo` on Java,+ Python and Scala stop ignoring scale. The `scaleDistinctTestNames` skip list — which had been+ masking the gap on five hosts — is deleted, so decimal scale is now verified everywhere rather+ than excused.++### Bug fixes++- **[#745](https://github.com/CategoricalData/hydra/issues/745)** silent-wrong equality/ordering,+ `bigintToIntN` narrowing, `parseUint32/64` bounds, and astral-plane `charAt`/`splitOn`/`compare`+ across the eight non-Haskell hosts.+- **[#742](https://github.com/CategoricalData/hydra/issues/742)** structural `equal`/`compare` on+ maps, sets and nested decimals no longer falls back to scale-blind or print-based comparison+ (including a hand-inlined Scala primitive that shadowed the overlay fix).+- **[#743](https://github.com/CategoricalData/hydra/issues/743)** kernel JSON decoder now rejects an+ `Either` object carrying both `left` and `right` keys instead of silently resolving one arm.+- **[#740](https://github.com/CategoricalData/hydra/issues/740)** the recursive parametric union decoder+ now emits an explicit type application instead of an untyped lambda, so recursive parametric-union+ types generate and compile on the Java host; also fixes `update-json-kernel` reconcile to build a+ complete inference universe so drifted kernel modules re-infer.+- **[#720](https://github.com/CategoricalData/hydra/issues/720)** Python's+ `hydra.lib.equality`/`ordering` did not satisfy IEEE `totalOrder` for floats, mis-ordering `NaN`+ and signed zero.+- **[#722](https://github.com/CategoricalData/hydra/issues/722)** two `kernelDefaultCoreProfile`+ correctness defects: rule ids that referred to rules no longer present, and a stubbed+ `isValidName` that accepted every name.++### Improvements++- **[#749](https://github.com/CategoricalData/hydra/issues/749)** `notEqual`/`const`/`flip` wired+ into each host's `#609` default-implementation fallback; orphaned Avro coder test suite recovered.+- **[#730](https://github.com/CategoricalData/hydra/issues/730)** a shared `~/.stack` build slot+ (`bin/with-stack-slot.sh`) replaces the pgrep slot mechanic, serializing concurrent GHC builds+ across the fleet behind a real mutex. The wrapper is now portable to macOS: `flock(1)` is+ util-linux and absent there, so it is emulated via Perl's `flock()` where missing, and the+ GNU-only `date -Is`/`date -d` calls are replaced with portable equivalents. Its bypass path also+ no longer re-execs forever. Without these, every entry point that routes through the slot —+ `bin/sync.sh`, `bin/test.sh`, `bin/run-bootstrapping-demo.sh` and `bin/prepare-release.sh` —+ failed immediately on macOS.+- **[#600](https://github.com/CategoricalData/hydra/issues/600)** the five published TypeScript+ packages are subpath-import-only (uniform export surface).+- **[#716](https://github.com/CategoricalData/hydra/issues/716)** `hydra.paths` reshaped onto the+ term-graph model (`TermGraph`/`TypeGraph`), aligning path steps with the term and type grammars+ and adding the link view of a graph; `mapKey`/`mapValue` collapse into a single `mapEntry` step.+- **[#701](https://github.com/CategoricalData/hydra/issues/701)** module cache freshness is now a+ Merkle hash over each module's dependency closure, so a change deep in the closure correctly+ invalidates dependents.+- **[#559](https://github.com/CategoricalData/hydra/issues/559)** host-agnostic build: the+ remaining hand-coded host build logic is promoted into `hydra.build.*`, with Java as the+ definitive second host.+- **[#721](https://github.com/CategoricalData/hydra/issues/721)** `checkNestedModuleNames` packaging+ check enforces the module-namespace no-prefix rule.++### Documentation++- **[#508](https://github.com/CategoricalData/hydra/issues/508)** de-Claude-speak documentation pass:+ style-guide section added, stale paths and dead links repaired, agent-operations wiki pages moved+ into `claude/`, and a `getting-started.md` guardrail against re-adding a TypeScript root export.+ ## [0.17.6] - 2026-08-30 Point release on the 0.17.x line, and the last backward-incompatible batch before the 1.0 surface
hydra-pg.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: hydra-pg-version: 0.17.6+version: 0.17.7 synopsis: Hydra's property-graph (TinkerPop/Gremlin) model and coder support description: Hydra is an implementation of the LambdaGraph data model, which takes advantage of an isomorphism between labeled hypergraphs and typed lambda calculus: in Hydra, "graphs are programs, and programs are graphs". Property graph support for Hydra category: Data@@ -77,7 +77,7 @@ base >=4.19.0 && <4.22 , bytestring >=0.11.5 && <0.13 , containers >=0.6.7 && <0.8- , hydra-kernel ==0.17.6- , hydra-rdf ==0.17.6+ , hydra-kernel ==0.17.7+ , hydra-rdf ==0.17.7 , scientific >=0.3.7 && <0.4 default-language: Haskell2010
src/main/haskell/Com/Gdblab/PathAlgebra/Expressions.hs view
@@ -35,6 +35,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | A conjunction of two selection conditions data AndCondition =
src/main/haskell/Com/Gdblab/PathAlgebra/Syntax.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | An RPQ alternation: either of two sub-expressions data Alternation =
src/main/haskell/Hydra/Cypher/Features.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Aggregate functions data AggregateFunctionFeatures =
src/main/haskell/Hydra/Cypher/OpenCypher.hs view
@@ -8,6 +8,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | An additive expression: a multiply/divide/modulo expression with zero or more +/- terms data AddOrSubtractExpression =
src/main/haskell/Hydra/Decode/Neo4j/Model.hs view
@@ -19,6 +19,7 @@ import qualified Hydra.Util as Util import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Decoder for hydra.neo4j.model.Constraint constraint :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Constraint
src/main/haskell/Hydra/Decode/Pg/Mapping.hs view
@@ -21,6 +21,7 @@ import qualified Hydra.Util as Util import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Decoder for hydra.pg.mapping.AnnotationSchema annotationSchema :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.AnnotationSchema
src/main/haskell/Hydra/Decode/Pg/Model.hs view
@@ -19,6 +19,7 @@ import qualified Hydra.Util as Util import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Decoder for hydra.pg.model.AdjacentEdge adjacentEdge :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.AdjacentEdge v)
src/main/haskell/Hydra/Demos/Genpg/Transform.hs view
@@ -51,6 +51,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M import qualified Data.Set as S
src/main/haskell/Hydra/Dsl/Pg/Model.hs view
@@ -13,6 +13,7 @@ import qualified Hydra.Typed as Typed import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | DSL constructor for hydra.pg.model.AdjacentEdge@@ -1186,7 +1187,7 @@ Core.applicationArgument = (Typed.unTypedTerm v)})) -- | DSL constructor for hydra.pg.model.Graph-graph :: Ord v => (Typed.TypedTerm (M.Map v (Model.Vertex v)) -> Typed.TypedTerm (M.Map v (Model.Edge v)) -> Typed.TypedTerm (Model.Graph v))+graph :: Typed.TypedTerm (M.Map v (Model.Vertex v)) -> Typed.TypedTerm (M.Map v (Model.Edge v)) -> Typed.TypedTerm (Model.Graph v) graph vertices edges = Typed.TypedTerm (Core.TermRecord (Core.Record { Core.recordTypeName = (Core.Name "hydra.pg.model.Graph"),@@ -1199,7 +1200,7 @@ Core.fieldTerm = (Typed.unTypedTerm edges)}]})) -- | DSL accessor for the edges field of hydra.pg.model.Graph-graphEdges :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Edge v)))+graphEdges :: Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Edge v)) graphEdges x = Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermProject (Core.Projection {@@ -1281,7 +1282,7 @@ Core.applicationArgument = (Typed.unTypedTerm original)}))}]})) -- | DSL accessor for the vertices field of hydra.pg.model.Graph-graphVertices :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Vertex v)))+graphVertices :: Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Vertex v)) graphVertices x = Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermProject (Core.Projection {@@ -1290,7 +1291,7 @@ Core.applicationArgument = (Typed.unTypedTerm x)})) -- | DSL updater for the edges field of hydra.pg.model.Graph-graphWithEdges :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Edge v)) -> Typed.TypedTerm (Model.Graph v))+graphWithEdges :: Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Edge v)) -> Typed.TypedTerm (Model.Graph v) graphWithEdges original newVal = Typed.TypedTerm (Core.TermRecord (Core.Record { Core.recordTypeName = (Core.Name "hydra.pg.model.Graph"),@@ -1307,7 +1308,7 @@ Core.fieldTerm = (Typed.unTypedTerm newVal)}]})) -- | DSL updater for the vertices field of hydra.pg.model.Graph-graphWithVertices :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Vertex v)) -> Typed.TypedTerm (Model.Graph v))+graphWithVertices :: Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Vertex v)) -> Typed.TypedTerm (Model.Graph v) graphWithVertices original newVal = Typed.TypedTerm (Core.TermRecord (Core.Record { Core.recordTypeName = (Core.Name "hydra.pg.model.Graph"),
src/main/haskell/Hydra/Encode/Neo4j/Model.hs view
@@ -13,6 +13,7 @@ import qualified Hydra.Neo4j.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Encoder for hydra.neo4j.model.Constraint constraint :: Model.Constraint -> Core.Term
src/main/haskell/Hydra/Encode/Pg/Mapping.hs view
@@ -12,6 +12,7 @@ import qualified Hydra.Pg.Mapping as Mapping import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Encoder for hydra.pg.mapping.AnnotationSchema annotationSchema :: Mapping.AnnotationSchema -> Core.Term
src/main/haskell/Hydra/Encode/Pg/Model.hs view
@@ -11,6 +11,7 @@ import qualified Hydra.Pg.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Encoder for hydra.pg.model.AdjacentEdge adjacentEdge :: (v -> Core.Term) -> Model.AdjacentEdge v -> Core.Term
src/main/haskell/Hydra/Error/Neo4j.hs view
@@ -8,6 +8,7 @@ import qualified Hydra.Neo4j.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | An error indicating that a Neo4j property graph is invalid data InvalidGraphError =
src/main/haskell/Hydra/Error/Pg.hs view
@@ -8,6 +8,7 @@ import qualified Hydra.Pg.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | An error indicating that an edge is invalid data InvalidEdgeError =
src/main/haskell/Hydra/Graphviz/Coder.hs view
@@ -37,7 +37,7 @@ import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting-import qualified Hydra.Shredding as Shredding+import qualified Hydra.Subterms as Subterms import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Testing as Testing@@ -50,8 +50,26 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M +-- | Collect (target binding, printed path) for every let-reference in a term node's tree+collectLetRefs :: Paths.SubtermPath -> Paths.TermNode -> [(Core.Name, String)]+collectLetRefs path node =++ let steps = Paths.unSubtermPath path+ in (Lists.concat (Lists.map (\link -> case link of+ Paths.TermLinkReference v0 -> case (Paths.termReferenceLinkTarget v0) of+ Paths.TermReferenceLet v1 -> [+ (+ Paths.letVariableReferenceVariable v1,+ (PrintPaths.subtermPath (Paths.SubtermPath (Lists.concat2 steps [+ Paths.termReferenceLinkStep v0]))))]+ _ -> []+ Paths.TermLinkSubterm v0 -> collectLetRefs (Paths.SubtermPath (Lists.concat2 steps [+ Paths.subtermLinkStep v0])) (Paths.subtermLinkChild v0)+ _ -> []) (Paths.termNodeLinks node)))+ -- | Convert a typed graph to a subterm-style (link-view) DOT graph graphToSubtermDotGraph :: Graph.Graph -> Dot.Graph graphToSubtermDotGraph graph =@@ -61,40 +79,34 @@ Dot.graphId = Nothing, Dot.graphStatements = (graphToSubtermDotStmts standardNamespaces graph)} --- | Convert a typed graph to subterm-style (link-view) DOT statements+-- | Convert a typed graph to binding-level DOT statements over the term graph graphToSubtermDotStmts :: M.Map Packaging.ModuleName String -> Graph.Graph -> [Dot.Stmt] graphToSubtermDotStmts namespaces graph =- Eithers.either (\_ -> []) (\sg ->- let nodes = Paths.subtermGraphNodes sg+ Eithers.either (\_ -> []) (\tg ->+ let roots = Paths.termGraphRoots tg+ names = Maps.keys roots labelsVisited =- Lists.foldl (\acc -> \node ->+ Lists.foldl (\acc -> \name -> let accLabels = Pairs.first acc accVisited = Pairs.second acc- name = Paths.subtermNodeName node raw = Names.compactName namespaces name uniq = Names.chooseUniqueLabel accVisited raw- in (Maps.insert name uniq accLabels, (Sets.insert uniq accVisited))) (Maps.empty, Sets.empty) nodes+ in (Maps.insert name uniq accLabels, (Sets.insert uniq accVisited))) (Maps.empty, Sets.empty) names labels = Pairs.first labelsVisited labelOf = \name -> Optionals.withDefault (Core.unName name) (Maps.lookup name labels) nodeStmt =- \node -> Dot.StmtNode (Dot.NodeStmt {- Dot.nodeStmtId = (toNodeId (Dot.Id (labelOf (Paths.subtermNodeName node)))),+ \name -> Dot.StmtNode (Dot.NodeStmt {+ Dot.nodeStmtId = (toNodeId (Dot.Id (labelOf name))), Dot.nodeStmtAttributes = (Just (Dot.AttrList [ [- labelAttr (labelOf (Paths.subtermNodeName node))]]))})- edgeStmtsForNode =- \node ->- let srcLabel = labelOf (Paths.subtermNodeName node)- links = Paths.subtermNodeLinks node- in (Optionals.mapOptional (\link -> case link of- Paths.SubtermLinkEdge v0 ->- let tgtLabel = labelOf (Paths.subtermEdgeTarget v0)- showPath = PrintPaths.subtermPath (Paths.subtermEdgePath v0)- in (Just (toEdgeStmt (Dot.Id srcLabel) (Dot.Id tgtLabel) (Just (Dot.AttrList [- [- labelAttr showPath]]))))- _ -> Nothing) links)- in (Lists.concat2 (Lists.map nodeStmt nodes) (Lists.concat (Lists.map edgeStmtsForNode nodes)))) (Shredding.shredGraph graph)+ labelAttr (labelOf name)]]))})+ edgeStmtsForRoot =+ \nm -> \node ->+ let srcLabel = labelOf nm+ in (Lists.map (\nt -> toEdgeStmt (Dot.Id srcLabel) (Dot.Id (labelOf (Pairs.first nt))) (Just (Dot.AttrList [+ [+ labelAttr (Pairs.second nt)]]))) (collectLetRefs (Paths.SubtermPath []) node))+ in (Lists.concat2 (Lists.map nodeStmt names) (Lists.concat (Lists.map (\nt -> edgeStmtsForRoot (Pairs.first nt) (Pairs.second nt)) (Maps.toList roots))))) (Subterms.graphToTermGraph graph) -- | Create a DOT label attribute labelAttr :: String -> Dot.EqualityPair
src/main/haskell/Hydra/Graphviz/Dot.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | A Graphviz DOT attribute list: one or more comma/semicolon-separated lists of key-value pairs newtype AttrList =
src/main/haskell/Hydra/Graphviz/Serde.hs view
@@ -41,6 +41,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Convert an attribute list to an expression attrListToExpr :: Dot.AttrList -> Ast.Expr
src/main/haskell/Hydra/Neo4j/Model.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.ByteString as B import qualified Data.Int as I import qualified Data.Map as M
src/main/haskell/Hydra/Neo4j/Pg.hs view
@@ -21,6 +21,7 @@ import qualified Hydra.Util as Util import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Compute the property-graph edge label for a Neo4j relationship type, given the schema and endpoint labels. edgeLabelForRelationship :: Neo4jModel.GraphType -> Neo4jModel.NodeLabel -> Neo4jModel.NodeLabel -> Neo4jModel.RelationshipType -> PgModel.EdgeLabel
src/main/haskell/Hydra/Pg/Coder.hs view
@@ -52,6 +52,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | Check a condition, returning an error if false
src/main/haskell/Hydra/Pg/Graphson/Coder.hs view
@@ -43,6 +43,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | Convert a GraphSON AdjacentEdge to a JSON Value. The Bool indicates whether this is an outgoing edge.
src/main/haskell/Hydra/Pg/Graphson/Construct.hs view
@@ -43,6 +43,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | Convert a property graph adjacent edge to a GraphSON adjacent edge
src/main/haskell/Hydra/Pg/Graphson/Syntax.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Int as I import qualified Data.Map as M
src/main/haskell/Hydra/Pg/Graphson/Utils.hs view
@@ -45,6 +45,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Convert a list of property graph elements to a list of vertices with their adjacent edges elementsToVerticesWithAdjacentEdges :: Ord t0 => ([PgModel.Element t0] -> [PgModel.VertexWithAdjacentEdges t0])
src/main/haskell/Hydra/Pg/Mapping.hs view
@@ -9,6 +9,7 @@ import qualified Hydra.Pg.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Configurable annotation keys for property graph mapping specifications data AnnotationSchema =
src/main/haskell/Hydra/Pg/Model.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | An edge which is adjacent to a given vertex. Only the other endpoint of the edge is provided.
src/main/haskell/Hydra/Pg/Printing.hs view
@@ -40,6 +40,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Print an edge using the provided value printer printEdge :: (t0 -> String) -> PgModel.Edge t0 -> String
src/main/haskell/Hydra/Pg/Query.hs view
@@ -8,6 +8,7 @@ import qualified Hydra.Pg.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | An aggregation query over a property graph data AggregationQuery =
src/main/haskell/Hydra/Pg/Rdf/Environment.hs view
@@ -9,6 +9,7 @@ import qualified Hydra.Rdf.Syntax as Syntax import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | The environment for property graph to RDF mapping data PgRdfEnvironment v =
src/main/haskell/Hydra/Pg/Rdf/Mappings.hs view
@@ -46,6 +46,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Convert edge types into property shape constraints for a given vertex label edgeTypesToPropertyShapes :: t0 -> (PgModel.EdgeLabel -> Syntax.Iri) -> PgModel.VertexLabel -> [PgModel.EdgeType t1] -> [ShaclModel.CommonConstraint]
src/main/haskell/Hydra/Pg/TermsToElements.hs view
@@ -51,6 +51,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | Apply a parsed pattern to a term, producing string terms
src/main/haskell/Hydra/Pg/Utils.hs view
@@ -47,6 +47,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Default Tinkerpop annotation schema defaultTinkerpopAnnotations :: Mapping.AnnotationSchema
src/main/haskell/Hydra/Print/Error/Pg.hs view
@@ -38,6 +38,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Show an invalid edge error as a string invalidEdgeError :: Pg.InvalidEdgeError -> String
src/main/haskell/Hydra/Tinkerpop/Examples/Modern.hs view
@@ -8,6 +8,7 @@ import qualified Hydra.Pg.Model as Model import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | The TinkerPop Modern property graph data, with int32 Literal ids
src/main/haskell/Hydra/Tinkerpop/Features.hs view
@@ -13,6 +13,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Base interface for features that relate to supporting different data types. data DataTypeFeatures =
src/main/haskell/Hydra/Tinkerpop/Gremlin.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Int as I -- | The arguments of a Gremlin as() step
src/main/haskell/Hydra/Tinkerpop/Language.hs view
@@ -40,6 +40,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | Populate language constraints based on TinkerPop Graph.Features tinkerpopLanguage :: Coders.LanguageName -> Features.Features -> Features.ExtraFeatures t0 -> Coders.Language
src/main/haskell/Hydra/Validate/Neo4j.hs view
@@ -18,6 +18,7 @@ import qualified Hydra.Validation as Validation import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Set as S -- | All Neo4j validation rule names, as fully qualified 'hydra.error.neo4j.<UnionType>.<variant>' strings.
src/main/haskell/Hydra/Validate/Pg.hs view
@@ -18,6 +18,7 @@ import qualified Hydra.Validation as Validation import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void import qualified Data.Map as M -- | Append a rule-tagged InvalidEdgeError finding to a ValidationResult.
src/main/haskell/OpenGql/Grammar.hs view
@@ -7,6 +7,7 @@ import qualified Hydra.Core as Core import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines) import qualified Data.Scientific as Sci+import Data.Void -- | A GQL abbreviated edge pattern: one of a fixed set of alternatives data AbbreviatedEdgePattern =