Skip to main content

Hydra programming language kernel

Project description

Hydra-Kernel

The Hydra kernel — the code that fundamentally defines what Hydra is and how it operates. Hydra's core data types (Type, Term, Graph, Module, etc.) and its fundamental programming logic (inference, checking, reduction, rewriting, validation, the coder framework, the primitive standard library) live here. The kernel uses the Hydra language to define the Hydra language itself.

Every other Hydra package is peripheral, adding capabilities like Haskell or Java support, RDF or property graph functionality, and so on. Every package depends on hydra-kernel; every host language imports a generated form of it.

Hydra is a functional programming language based on the LambdaGraph data model, exploring an isomorphism between typed lambda calculus and labeled hypergraphs. See the main Hydra README for project overview and use cases.

What lives here

packages/hydra-kernel/ is the DSL source of truth for the kernel. There is no generated output in this package — only the hand-written DSL modules that describe what the kernel is. Generated kernels for each host language live in dist/<lang>/hydra-kernel/.

Type modules

src/main/haskell/Hydra/Sources/Kernel/Types/ defines the core data structures:

  • Core.hs — the central grammar: Term, Type, Literal, Function, Elimination, plus annotations and type schemes. The most important file in the kernel.
  • Graph.hsGraph, Primitive, Library, TermCoder — the runtime containers for terms, types, and primitive bindings. Each Primitive pairs a universal PrimitiveDefinition (from Packaging.hs) with a host-specific native implementation.
  • Packaging.hsPackage, Module, Definition, module/package dependencies, and the EntityMetadata documentation/lifecycle types. See the Packaging wiki page for the model.
  • Coders.hs — the bidirectional Coder framework that every per-language coder builds on, plus Adapter (which transforms both type and value).
  • Errors.hs — the unified error taxonomy used across inference, validation, and code generation.
  • Ast.hs — variant tags used by validators and serializers.
  • Mantle.hs — type-system internals (TypeScheme, kind, class constraints).
  • Subdirectories (Error/, Json/, Show/) — submodule groupings for error variants, JSON encoding, and pretty-printing.

Term modules

src/main/haskell/Hydra/Sources/Kernel/Terms/ defines the algorithms:

  • Inference.hs — Algorithm W (Hindley–Milner) with class constraints, type schemes, and Hydra-specific extensions for nominal terms.
  • Checking.hs — type checking; runs after inference and validates results.
  • Reduction.hs — beta/eta reduction, including tail-call detection used by the Python and Java coders (see TCO implementation).
  • Rewriting.hs — free-variable analysis, substitution, term traversal.
  • Analysis.hsisSelfTailRecursive and related shared analyses.
  • Validate/ — module-level validation rules (hydra.validate.*).
  • Sorting.hs, Topology.hs — Tarjan SCC over module/term dependency graphs.
  • Dsls.hs, Generation.hs — the meta-level pieces that drive sync pipelines.
  • Lexical.hs, Names.hs, Scoping.hs, Variables.hs — binder hygiene, name generation, scope handling.

Library modules — the canonical primitive registry

src/main/haskell/Hydra/Sources/Kernel/Lib/ is the primitive registry: one module per hydra.lib.<sub> namespace, declaring every primitive in that namespace as a PrimitiveDefinition (name, description, signature, isPure / isTotal flags, and an optional cross-compilable default implementation in Hydra terms).

The 18 namespaces — Chars, Effects, Eithers, Equality, Files, Hashing, Lists, Literals, Logic, Maps, Math, Optionals, Pairs, Regex, Sets, Strings, System, Text — together declare ~269 primitives (see the lexicon for the authoritative count). See docs/hydra-lexicon.txt for the full signature list, and docs/recipes/adding-primitives.md for the recipe to add a new one.

Host-side primitive registries — including the Haskell-side Hydra/Overlay/Haskell/Libraries.hs (in overlay/haskell since #473, relocated under the hydra.overlay.<lang>.* namespace by #501) that pairs each native implementation with a primitive name — are distinct from this canonical registry: they provide host-specific implementations and derive each primitive's name from its generated PrimitiveDefinition (the single source of truth), rather than re-declaring it.

Code organization

The kernel package contains DSL sources only. Generated kernels and runtime helpers live in adjacent directories:

Where What
packages/hydra-kernel/src/main/haskell/Hydra/Sources/ Kernel DSL sources (this package)
heads/haskell/src/main/haskell/Hydra/Dsl/ Hand-written Haskell DSL helpers used to write the sources
overlay/haskell/hydra-kernel/src/main/haskell/Hydra/Overlay/Haskell/Lib/ Hand-written Haskell primitive implementations (overlaid onto the kernel dist)
dist/haskell/hydra-kernel/ Generated Haskell kernel (Hydra/Core.hs, Hydra/Graph.hs, etc.)
dist/java/hydra-kernel/ Generated Java kernel (hydra.core.*, hydra.graph.*, etc.)
dist/python/hydra-kernel/ Generated Python kernel
dist/scala/hydra-kernel/ Generated Scala kernel
dist/{clojure,common-lisp,emacs-lisp,scheme}/hydra-kernel/ Generated Lisp-dialect kernels
dist/typescript/hydra-kernel/ Generated TypeScript kernel
dist/json/hydra-kernel/ Generated JSON kernel — language-agnostic interchange

For the broader packages/heads/dist pattern, see the Code organization wiki page.

How the kernel is regenerated

The kernel is generated from these DSL sources via bin/sync.sh. After editing a file under Hydra/Sources/Kernel/, run:

heads/haskell/bin/sync-haskell.sh   # regenerate Haskell kernel, run stack test
bin/sync.sh                # regenerate every target language's kernel and tests

See Generating code with Hydra for the full pipeline and The Hydra build system for the cache model.

Extending the kernel

Three of the most common kernel-modification tasks have dedicated recipes:

For the DSL idioms used to write these sources, see the Haskell DSL guide.

See also

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hydra_kernel-0.17.1.tar.gz (634.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hydra_kernel-0.17.1-py3-none-any.whl (610.7 kB view details)

Uploaded Python 3

File details

Details for the file hydra_kernel-0.17.1.tar.gz.

File metadata

  • Download URL: hydra_kernel-0.17.1.tar.gz
  • Upload date:
  • Size: 634.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for hydra_kernel-0.17.1.tar.gz
Algorithm Hash digest
SHA256 d7e630cba90ccee2ff1eb47acd2687954fd26c598161d5c85841cfc6a83c4b4b
MD5 422e444a285bd4377b203e5fb4039c3c
BLAKE2b-256 2beb0f572a0332266acda46f6d5105463821f79d512da3ab36a740de0ce09f39

See more details on using hashes here.

File details

Details for the file hydra_kernel-0.17.1-py3-none-any.whl.

File metadata

  • Download URL: hydra_kernel-0.17.1-py3-none-any.whl
  • Upload date:
  • Size: 610.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for hydra_kernel-0.17.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ac5d85bc8484401240f46438e131db06cec92ed7b4cb30e4fcafb472a011bf42
MD5 1de79b8a31358d9fdce1cc42e77f845d
BLAKE2b-256 ac9079b705fc5553d99166fb71b38f5d1e954888f9ee573f61039acc8e081b3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page