hamler-lang/hamler
53.2
Adequate · 23 September 2026
6.4k
lines of production code
Erlang
with Haskell
5
measurements over time
What this system is
Hamler is a programming language compiler that translates source code into Erlang, enabling execution on the Erlang virtual machine. It provides a comprehensive standard library that exposes Erlang/OTP capabilities—such as process management, distributed systems, database access, and network I/O—through a functional interface. The system includes a build toolchain, an interactive REPL, and a property-based testing framework to support development and verification.
Features
Add Application Config, Resource, and Callback modules
The library now provides new modules for managing application configuration, resources, and lifecycle callbacks. The \Config\ module exposes functions to retrieve configuration values of various types (e.g., \getAtom\, \getBool\, \getInt\) from the application environment. The \Resource\ module allows fetching the application specification (\getAppSpec\). The \Callback\ module implements the FFI interface for application start, pre-stop, and stop hooks, enabling users to integrate with the application lifecycle.
lib/Control/Application · high confidence
Add Control.Application, Control.Monad, Control.Process, Text.Json, and Text.Parsec modules
The library introduces new modules for application management, monadic effects, and process control, alongside parsing and JSON support. Control.Application provides FFI bindings for Erlang's application module, exposing functions to start, stop, and manage application lifecycles. Control.Monad implements the Monad, Applicative, and Functor typeclasses with FFI bindings for list and IO operations. Control.Process offers FFI bindings for Erlang's process management, including message passing, linking, monitoring, and process control. Additionally, Text.Json provides a JSON parser, and Text.Parsec introduces a parser combinator library for text parsing.
lib/Control · high confidence
Add Foreign Function Interface (FFI) and unsafe type coercion capabilities
Users can now call external functions from other modules using the new Foreign module, which provides FFI wrappers (ffi0-ffi7 and their IO variants) to invoke functions with up to seven arguments, as well as an unsafeCoerce function for direct type casting.
lib · high confidence
Add Foreign library with Curry and Maybe modules
The lib/Foreign directory is introduced, providing functional programming utilities in Erlang. This includes a Curry module for partial application and a Maybe module offering a Maybe type with ?Just and ?Nothing macros, alongside their respective header files.
lib/Foreign · high confidence
Add GenEvent, GenServer, GenStatem, and Supervisor behaviours
Introduces new FFI modules and type definitions for OTP behaviours: GenEvent, GenServer, GenStatem, and Supervisor. Each behaviour includes a main module (e.g., \Control.Behaviour.GenEvent\), a proxy module (e.g., \Control.Behaviour.GenEvent.Proxy\), and associated types (e.g., \Control.Behaviour.GenEvent.Types\). These modules provide APIs for starting, stopping, and interacting with these OTP processes, including callbacks for initialization, event handling, and state transitions.
lib/Control/Behaviour · high confidence
Add Identity wrapper and Max/Min newtypes for ordered data
The library introduces a new Identity data type that implements Functor, Applicative, Monad, Foldable, Traversable, and various typeclass instances (Eq, Ord, Show, etc.), providing a simple wrapper for single-value contexts. Additionally, Max and Min newtypes are added to support ordered data structures, implementing Semigroup and Monoid instances that track maximum and minimum values respectively.
lib/Data/Functor · high confidence
Add Persistent Term module for storing data in memory
A new module, Data.Term.Persistent, has been introduced to provide an interface for managing persistent terms in memory. This module exposes functions to store, retrieve, and erase named terms, as well as query information about the memory usage and count of persistent terms. This allows users to persist data across function calls or sessions using a key-value store mechanism.
lib/Data/Term · high confidence
Add QuickCheck testing library
Added the QuickCheck library to the codebase, providing a new testing framework for property-based testing. The implementation includes a random number generator module (QuickCheck.erl) and a core module (QuickCheck.hm) that defines types and classes for generating random values (Arbitrary), creating random generators (Gen), and running property checks. This enables users to write and execute automated tests using the QuickCheck methodology.
lib/Test · high confidence
Add RPM packaging support for Hamler
Users can now build and install Hamler via RPM packages. This change introduces a new Makefile and spec file in the deploy/packages/rpm directory, enabling the creation of .rpm files for Linux distributions that support RPM-based package management.
deploy/packages/rpm · high confidence
Add Reader, State, and Writer monad transformers
The library introduces three new monad transformer modules: Reader, State, and Writer. The Reader module provides a read-only environment context with \ask\ and \local\ accessors. The State module adds mutable state management with \get\, \put\, \modify\, and \evalState\/\execState\ helpers. The Writer module supports logging or accumulating values via a Monoid, offering \tell\, \listen\, and \pass\ operations. Each module implements Functor, Applicative, and Monad type classes, enabling composable effect handling for their respective use cases.
lib/Control/Monad · high confidence
Add System.\* modules for file, directory, environment, and VM operations
Users can now access new experimental modules in the System namespace, including System.Code for module loading and path management, System.Dir and System.File for directory and file operations (create, delete, copy, read, write), System.Env for environment variables, System.Error for exception handling, System.Init for boot and restart control, System.Logger for logging, System.OS for process and system information, System.Random for random number generation, System.Timer for timer management, and System.VM for VM statistics and configuration. These modules provide FFI bindings to Erlang/OTP functions, enabling file system manipulation, environment variable access, and system monitoring.
lib/System · high confidence
Add System.IO.Printf and System.IO.Types modules
The System.IO module is expanded with new files: System.IO.Printf, which provides a printf-style formatting function supporting format specifiers for integers, floats, and strings, and System.IO.Types, which defines the IO monad wrapper, file path type, and I/O mode/seek mode enums. This introduces new formatting capabilities and type definitions for IO operations.
lib/System/IO · high confidence
Add distributed Erlang/OTP modules
Introduces new modules for distributed Erlang/OTP functionality, including Global, GlobalGroup, NetAdm, NetKernel, Node, PG, Port, RPC, and Slave, each with corresponding FFI bindings for the host language.
lib/Control/Distributed · high confidence
Add experimental ETS, DETS, and Mnesia database modules
The lib/Database area now includes new experimental database modules for Erlang's ETS, DETS, and Mnesia systems. These modules provide foreign function interface (FFI) wrappers for common database operations such as creating tables, inserting and deleting records, querying data, and managing table metadata. The ETS module exposes functions for in-memory table management, the DETS module handles disk-based storage, and the Mnesia module provides distributed database capabilities. All three modules are marked as experimental and include comprehensive function exports for database interactions.
lib/Database · high confidence
Add new data structure modules to the standard library
The lib/Data directory now includes a comprehensive set of new modules for common data structures and utilities. This includes Array, Atom, Atomics, Binary (with Base64 support), Bits, Bool, Char, Counters, DateTime, Digraph, EVal, Either, Enum, Eq, Float, Foldable, Function, and Functor. These additions provide users with native support for arrays, directed graphs, atomic counters, bit manipulation, and functional programming constructs like Functors and Foldables.
lib/Data · high confidence
Added Debian package build infrastructure for Hamler
New files have been added to the repository to enable building .deb packages for the Hamler language. This includes a Makefile to orchestrate the build process, a debian/rules script to handle the packaging steps, a debian/control file defining package metadata and dependencies, a debian/changelog, and a debian/copyright file containing the Apache 2.0 license text. These changes allow users to build and install Hamler via standard Debian package management tools.
deploy/packages/deb · high confidence
Added Erlang code generation support for Hamler
The compiler now supports generating Erlang source code from Hamler. This change introduces the \Language.Hamler.Erlang\ module hierarchy, including \SimpleType.hs\ which defines the intermediate representation for Erlang expressions and binders, \TranslateSimpleType.hs\ which converts the internal AST to Erlang forms, \CodeGen.hs\ which handles module structure and exports, and \PrettySimpleType.hs\ for formatting. This enables users to compile Hamler programs to run on the Erlang virtual machine.
src/Language/Hamler/Erlang · high confidence
Added Make/Actions module for module compilation and code generation
Introduced a new module, Language.Hamler.Make.Actions, which implements the logic for managing module compilation, caching, and code generation. This module handles reading module information, generating Erlang source code, and writing output files, effectively replacing or augmenting the previous build system's handling of these tasks.
src/Language/Hamler/Make · high confidence
Introduce Core Erlang code generation for Hamler
The Hamler compiler now generates Core Erlang AST from Puresource code, enabling compilation to Erlang/OTP 24. This change adds the \CodeGen\ module which translates Hamler bindings, functions, and expressions into Erlang constructs, including support for \let\ bindings, tuple patterns, and binary pattern matching. The \Make\ module is updated to integrate this new code generation step into the build pipeline, allowing Hamler modules to be compiled to Erlang source files.
src/Language/Hamler · high confidence
Introduce Hamler REPL server
A new executable script, repl/replsrv, has been added to provide a command-line REPL (Read-Eval-Print Loop) for the Hamler language. This server allows users to interactively compile and execute Hamler code, supporting commands such as 'quit' and 'help', and handles output formatting for integers, atoms, and other types.
repl · high confidence
Introduce Hamler compiler and REPL commands
The app directory now contains the implementation for the Hamler compiler's CLI, including commands for building, running, and testing projects, as well as an interactive REPL. This adds the core functionality for compiling Hamler source files to Erlang and executing them, with support for environment variables like HAMLER\_HOME to configure installation paths and output directories.
app · high confidence
Introduce Hamler language module
Added the initial module for the Hamler programming language, exposing a 'hello' function and a 'version' identifier to the public API.
src/Language · high confidence
Introduce experimental network modules for TCP, UDP, TLS, and DTLS
Added new experimental modules for network communication, including TCP, UDP, TLS, and DTLS, along with supporting modules for Internet (Inet) and UDP options. These modules provide FFI bindings for socket operations, allowing users to perform network I/O with features like timeouts, address parsing, and option configuration.
lib/Network · high confidence
New process management utilities for spawning, garbage collection, and state inspection
Added a new \Control.Process\ module providing FFI bindings for Erlang process operations. This includes \Spawn\ for creating linked or monitored processes with options, \GC\ for triggering garbage collection and hibernation, \Infos\ for retrieving process metadata and message queues, \Flags\ for managing process flags like heap size and priority, \Dict\ for accessing the process dictionary, and \Proxy\ for waking up suspended processes. These additions enable users to manage process lifecycle, memory, and state directly from the host language.
lib/Control/Process · high confidence
Streamlined build, test, and installation workflows via Makefile
The project now provides a unified Makefile that simplifies common development tasks. Users can run \make build\ to compile the project, \make test\ to execute the test suite, and \make install\ to install the compiler and standard libraries to a configurable home directory. The installation process automatically detects the appropriate path (e.g., \/usr/lib/hamler\ for root or \\~/.hamler\ for user-level installs) and updates the user's shell configuration to include the Hamler binaries in the PATH. Additionally, a \make repl\ target is provided to launch the interactive REPL.
(repo-wide) · high confidence
Behavioural changes
Added placeholder and README in the doc directory
A new placeholder file and a README file were added to the doc directory. The README contains a link to the external documentation repository, providing users with a starting point for further information.
doc · medium confidence
Test coverage
Add comprehensive test suite for Text, System, Control, Database, and Network modules; Add tests for Term.Persistent module; Added automated tests for ETS and Mnesia database modules; Added network protocol tests for TCP and UDP; Added system-level test coverage for directory, file, error handling, and I/O operations; Added test suites for Control module components; Added tests for Reader, State, and Writer monads; Expanded test coverage for Data modules.
Dependencies
Updated build dependencies and source repositories
The project now pulls specific git revisions of the Erlang, CoreErlang, and Purescript repositories as source dependencies. Additionally, the Hamler package version has been updated to 0.5, and the build tool dependencies (such as happy) and library dependencies (including Cabal, CoreErlang, Glob, aeson, and others) have been refreshed to their latest compatible versions.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 50 → 53 (+3.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 94 → 96 (+1.9)
- Architecture 100 → 93 (-6.7)
- Maturity 43 → 57 (+13.9)
- Readiness 41 → 51 (+10.4)
- Security 46 → 40 (-5.9)
- Event Sourcing 100 → 100 (+0.0)
Resolved (30)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- High IaC: DS-0015 (.github/dockerfile/Dockerfile.centos)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 10 more
New (66)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (5 lines × 2) (lib/Control/Behaviour/Supervisor/Impl.erl)
- Duplicated block (5 lines × 2) (lib/Database/DETS.erl)
- Duplicated block (5 lines × 2) (lib/Database/DETS.erl)
- Duplicated block (7 lines × 2) (lib/Control/Behaviour/GenServer/Proxy.erl)
- Duplicated block (7 lines × 2) (lib/Control/Behaviour/Supervisor/Impl.erl)
- Duplicated block (9 lines × 2) (lib/Data/Pid.erl)
- High IaC: DS-0015 (.github/dockerfile/Dockerfile.centos)
- High IaC: DS-0015 (.github/dockerfile/Dockerfile.centos)
- High IaC: WD-DOCKER-0001 (.github/dockerfile/Dockerfile.centos)
- High IaC: WD-DOCKER-0001 (.github/dockerfile/Dockerfile.centos)
- High IaC: WD-DOCKER-0001 (.github/dockerfile/Dockerfile.debian)
- High IaC: WD-DOCKER-0001 (.github/dockerfile/Dockerfile.debian)
- High IaC: WD-DOCKER-0009 (.github/dockerfile/Dockerfile.centos)
- High IaC: WD-DOCKER-0009 (.github/dockerfile/Dockerfile.centos)
- High IaC: WD-DOCKER-0009 (.github/dockerfile/Dockerfile.debian)
- High IaC: WD-DOCKER-0013 (.github/dockerfile/Dockerfile.centos)
- High IaC: WD-DOCKER-0013 (.github/dockerfile/Dockerfile.debian)
- High: security finding (details withheld)
- …and 46 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
hamler-lang/hamler was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 97e1e2f09c2c6e8ac5c7eb2637596dfceab3b788 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.