ML
- OCaml 98.8%
- Emacs Lisp 0.6%
- Nix 0.4%
- Standard ML 0.1%
- Dune 0.1%
| bin | ||
| docs | ||
| emacs | ||
| examples | ||
| lib | ||
| test | ||
| .envrc | ||
| .gitignore | ||
| .ocamlformat | ||
| CLAUDE.md | ||
| dune-project | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
Amelie
Idea
- Modular design (ml modules) but one translation unit (monomorphization)
- can module be a kind, and vtables the value representation of module types?
- Inferred types with optional annotations
- Pascal/ML hybrid syntax
- Arity part of function identity
TODO LIST
- doc comments that are part of the ast
Type system
- ghetto row poly for tuple generalization
- kind checking pass to catch kind errors with a better error isntead of failing unification
- specialized unify nat error
Design
Amelie is a functional language in the style of ML, in the sense that it is designed to be modular, but takes some inspiration from Rust, by for example not making functions curried.
AI
Claude Code has been used extensively as a sparring partner, and for generating the most tedious parts of the code, like the parser.
The core of the semantic analysis is based on a prior artisanal imlementation ™️ of the paper "Algorithm W Step by Step" by Martin Grabmüller by myself.
The project has now taken on a sort of personal experiment of pushing vibe coding to the limit of what I'm comfortable with.