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 13 namespaces — Chars, Eithers, Equality, Lists, Literals, Logic, Maps, Math, Maybes, Pairs, Regex, Sets, Strings — together declare 241 primitives. 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/Dsl/Libraries.hs (in overlay/haskell since #473) 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/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:

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.16.1.tar.gz (527.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.16.1-py3-none-any.whl (513.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hydra_kernel-0.16.1.tar.gz
  • Upload date:
  • Size: 527.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.16.1.tar.gz
Algorithm Hash digest
SHA256 1d2b3d3090d364f10252db074a796fe090743eda2d938a8f1bce1e31094bff11
MD5 84006ed7fbfabec302fa7fce966c3700
BLAKE2b-256 ac7ec4c755cbaea5d3af9a60a8c6ba020ac6f63464d4661165360661f446c933

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hydra_kernel-0.16.1-py3-none-any.whl
  • Upload date:
  • Size: 513.6 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.16.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d6723054431f7135e850a93cdb12630a5aaf4c148f5f436132cbec54f154447d
MD5 885811fe580af2d35540f9d84755bf87
BLAKE2b-256 d88e3f7fe180c6bd2cd65857c77c18b10b0c4de0a17d80739917cc8b5c0ddf71

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