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.hs—Graph,Primitive,Library,TermCoder— the runtime containers for terms, types, and primitive bindings. EachPrimitivepairs a universalPrimitiveDefinition(fromPackaging.hs) with a host-specific native implementation.Packaging.hs—Package,Module,Definition, module/package dependencies, and theEntityMetadatadocumentation/lifecycle types. See the Packaging wiki page for the model.Coders.hs— the bidirectionalCoderframework that every per-language coder builds on, plusAdapter(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.hs—isSelfTailRecursiveand 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/Sources/Libraries.hs
that pairs each primitive name with its native implementation — are
distinct from this canonical registry: they reference primitives by name
and provide host-specific implementations.
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 |
heads/haskell/src/main/haskell/Hydra/Lib/ |
Hand-written Haskell primitive implementations |
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:
- Adding new type and term constructors
— solving the bootstrap problem when you extend
Core.TermorCore.Type. - Adding new primitive functions
— adding to
hydra.lib.*and registering across all hosts. - Refactoring the Hydra kernel — creating, renaming, moving, or deleting kernel elements or modules, including namespace refactoring.
For the DSL idioms used to write these sources, see the Haskell DSL guide.
See also
- Concepts — the LambdaGraph data model and type system.
- Implementation overview — architecture, type modules, the coder framework, primitives.
hydra-haskellREADME — the bootstrapping Haskell head that consumes this package.- Hydra lexicon — kernel types + primitive signatures in one file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hydra_kernel-0.16.0.tar.gz.
File metadata
- Download URL: hydra_kernel-0.16.0.tar.gz
- Upload date:
- Size: 555.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
215c4c097a34bc24c5a0e74dfe263e6082a841f6bf6b6c4f8bcfaabb65514e82
|
|
| MD5 |
d28e2cd508b76f3b6d38fef5fd7a80db
|
|
| BLAKE2b-256 |
bc78e48a58239acdae789562943a1f6a48ce05d75475005d9e60c774fef12a99
|
File details
Details for the file hydra_kernel-0.16.0-py3-none-any.whl.
File metadata
- Download URL: hydra_kernel-0.16.0-py3-none-any.whl
- Upload date:
- Size: 488.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd34c08cc359fe753ef20151679e0ac9fd1057ae5359fd31f27de967cd317256
|
|
| MD5 |
32af88651cd6bbb0efa3f89fc430dc93
|
|
| BLAKE2b-256 |
546f9a2622b803c832530a01ab5e930ed265b846414c5cf0121e25e189538928
|