HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
coalton-lang
coalton
Common Lisp2021–2026
coalton-lang / coalton

coalton

Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp.

32Distinct people
72Mentions
1Explicit recommenders
1.8KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

Coalton seems great, I love the idea. This issue seems problematic, though: https://github.com/coalton-lang/coalton/issues/84

dunefox used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year72 dated mentions

Observed mentions: 2021-10-27 01:30:41 UTC to 2026-07-10 17:19:00 UTC.

05101520252021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 5 mentions; 1 submissions, 4 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 18 mentions; 3 submissions, 15 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 23 mentions; 1 submissions, 22 comments20232024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 12 mentions; 1 submissions, 11 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 10 mentions; 0 submissions, 10 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC514
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC18315
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC23122
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC12111
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC10010
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC413

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp. Coalton integrates directly into Common Lisp: (defpackage #:differentiation (:use #:coalton #:coalton-prelude) (:local-nicknames (#:sym #:coalton/symbol)) (:export #:Expr #:EConst #:EVar #:E+ #:E*) (:export #:diff #:t #:d/dt)) (in-package #:differentiation) (named-readtables:in-readtable coalton:coalton) (coalton-toplevel ;; Define a new parametric algebraic data type for simple ;; mathematical expressions. (define-type (Expr :t) "A symbolic expression of basic arithmetic." (EConst :t) (EVar sym:Symbol) (E+ (Expr :t) (Expr :t)) (E* (Expr :t) (Expr :t))) ;; The classic `diff` function, in Coalton. (declare diff (Num :t => sym:Symbol * Expr :t -> Expr :t)) (define (diff x f) "Compute the derivative of `f` with respect to `x`." (match f ((EConst _) ; c' = 0 (EConst 0)) ((EVar s) ; x' = 1 (if (== s x) (EConst 1) (EConst 0))) ((E+ a b) ; (a+b)' = a' + b' (E+ (diff x a) (diff x b))) ((E* a b) ; (ab)' = a'b + ab' (E+ (E* (diff x a) b) (E* a (diff x b)))))) ;; We can use `t` just fine since Coalton doesn't import `cl:t`. (define t (sym:make-symbol "t")) (declare d/dt (Num :t => Expr :t -> Expr :t)) (define (d/dt f) "The time derivative operator." (diff t f))) It also works directly in the REPL: CL-USER> (in-package #:differentiation) DIFFERENTIATION> (coalton-toplevel (define (square x) (E* x x))) ;; SQUARE :: ∀ A. ((EXPR A) → (EXPR A)) DIFFERENTIATION> (coalton (d/dt (E+ (square (EVar t)) (EConst 1)))) #.(E+ #.(E+ #.(E* #.(ECONST 1) #.(EVAR |t|)) #.(E* #.(EVAR |t|) #.(ECONST 1))) #.(ECONST 0)) Type errors are discovered at compile-time, and errors are printed beautifully without sacrificing Common Lisp's interactive debugging facilities. DIFFERENTIATION> (coalton (d/dt (E+ (EConst 1/2) (EConst 0.5)))) error: Type mismatch --> repl:1:32 | 1 | (coalton (d/dt (E+ (EConst 1/2) (EConst 0.5)))) | ^^^^^^^^^^^^ Expected type '(EXPR FRACTION)' but got '(EXPR F32)' Coalton is currently used in production to build defense and quantum computing software. Getting Started WarningCoalton has not reached "1.0" yet. This means that, from time to time, you may have a substandard user experience. While we try to be ANSI-conforming, Coalton is currently only tested on recent versions of SBCL, Allegro CL, and Clozure CL. The version of Coalton that may be in Quicklisp may not be up-to-date. Prepare: Install SBCL (on macOS with Homebrew: brew install sbcl). Install Quicklisp by following instructions here. (The step command involving gpg is not needed.) After installing Quicklisp, you should have a quicklisp folder which will make installing Coalton easier. Install: Clone this repository into a place your Lisp can see (e.g., ~/quicklisp/local-projects/). Use: Either run (ql:quickload :coalton), or add #:coalton to your ASD's :depends-on list. Test: Compile the tests with (ql:quickload :coalton/tests), then run the tests with (asdf:test-system :coalton). NoteRunning the Coalton test suite on SBCL requires GNU MPFR in order to run Big-Float tests. If you would like to run tests without installing gnu-mpfr, you can use Coalton's portable Big-Float implementation by running (pushnew :coalton-portable-bigfloat *features*) before loading Coalton. Learn: Start with Whirlwind Tour of Coalton, the language manual, and the standard library reference, and then take a peek at the examples directory. It may also be helpful to check out the introductory blog post. Open Source Community: Awesome Coalton has a list of community-built libraries, applications, and examples, that you can use in your own projects or as examples to learn from. What's Here? This repository contains the source code to the Coalton compiler, and the standard library. It also contains two optional libraries, which are not loaded by default: coalton/xmath, for extended mathematics, and coalton/threads, for threads, synchronization, and parallel computation (SBCL only). It also contains a few example programs, such as: Some simple pedagogical programs, An implementation of Jones's Typing Haskell in Haskell, and An implementation of a simple Quil parser using parser combinators. Lastly and importantly, we maintain a collection of documentation about Coalton in the docs directory. Get Involved Want to ask a question about Coalton, propose a feature, or share a cool program you wrote? Try posting in the GitHub Discussions page! We welcome contributions of all forms, especially as we stabilize toward a 1.0 release. We would be grateful to receive: bug reports (filed as issues), bug fixes and typo corrections (filed as pull requests), small example programs, and user experience troubles.
Read the full README on GitHub

What Hacker News says

72 sources
This project? https://github.com/Syzygies/Compare If Dotcl does have good performance, it would be interesting to try running Coalton on top of it too. Coalton syntax is probably not unusual if you are familiar with OCaml and F#: https://github.com/coalton-lang/coalton (Though I'd expect the performance of the typical use case of running on top of SBCL to still be better.) From the same project there's the recently released mine editor that's trying to be a friendlier gateway into trying Common Lisp (and/or Coalton) than emacs: https://coalton-lang.github.io/mine/ Time-to-first-SHOUTING is still once you start a REPL though -- it tells you that your package (namespace) is CL-USER. I sort of think it's one of those things that grows on you, or at least isn't annoying after a while (until you need to deal with certain foreign function inter
Read the rest
faces anyway), and it's an interesting possible convention to use SHOUT-CASE in docstrings to call out specific parameters or other function names instead of some @param, \param, @link, or what have you.
In Dotcl: Common Lisp Implementation on .NET
It's niche but used enough in the industry to give us tools like Coalton (https://github.com/coalton-lang/coalton/), used enough by hobbyists to give us nice new libraries (new TUI library: https://github.com/atgreen/cl-tuition/blob/master/examples/R...) and exceptionally good and fast open-source compilers (SBCL) (with a good bus factor and contributors from the industry, like Google), it has enough libraries to allow us to ship software to clients (web clients, web servers, web UIs (webview, webui), SQL libraries, etc). It's niche but the motivated developer can publish a game on Steam (Kandria). (btw, ABCL has the benefit of Java libraries, for those interested) Julia has its own issues (and isn't on par outside of scientific area).
In Clojure Land – Discover open-source Clojure libraries and frameworks
It would probably depend on the Scheme/Lisp implementation and how it was secured. If it used a Scheme implementation like in Halo:CE, then people would have justifiably hated it. If it used something more like MIT-Scheme, people might've been okay with it. But I suspect it would get the same hate that JS gets, since there is a lot of low-quality JS code floating around -- even though JS itself isn't remotely that bad -- and you would instead have a lot of low-quality Scheme code floating around. Damned if you do, damned if you don't. FWIW, it is feasible to put Scheme/Lisp in a browser today, and it might even be fun. Take a browser that lacks JS (e.g. Dillo, w3m); figure out how to add Firefox's or Chromium's approach to isolating each Javascript instance; and embed a Scheme or Common Lisp implementation (e.g. Chez Scheme [1] or ECL [2
Read the rest
]). You will need to decide what Scheme/Lisp functions/macros to include/exclude. It may seem obvious to exclude file operations, but they did that with JS and now we have IndexedDB; a restricted, virtual file system might be fun to play with. Multithreading might seem like a great thing to include, until you start trying to implement secure multithreading. I would start with whatever cl-isolated [3] allows and expand/contract from there. And before anyone asks, "would this actually be worth implementing in 2025?", the answer is decidely "yes". You could build powerful desktop applications without the full weight of Electron. You could develop local-network webapps for you and/or your company. But I think it would be a bad idea to deploy this on the open internet without first spending a lot of time securing the browser overall. Another option is resurrecting Closure [4], which is written entirely in Common Lisp. In that, you could go on a wild tangent and support multiple scripting languages (e.g. Common Lisp via cl-isolated, cl-forth [5], cl-javascript [6], cl-python [7], scheme88 [8], and even Coalton [9]). [1] <https://old.reddit.com/r/scheme/comments/a3oogf/questions_on...> [2] With ECL, you could use cl-isolated in addition to OS-level containerization, to achieve more defense-in-depth. Or maybe port cl-isolated to Chez Scheme. [3] <https://github.com/kanru/cl-isolated/> [4] <http://closure.common-lisp.dev> [5] <https://github.com/gmpalter/cl-forth> [6] <https://marijnhaverbeke.nl/cl-javascript/> [7] <https://clpython.common-lisp.dev/> [8] <http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/s...> [9] <https://github.com/coalton-lang/coalton>
In RSC for Lisp Developers
for folks looking for libraries: https://github.com/CodyReichert/awesome-cl/ (I don't know for popularity but my personal opinion is that CL is still unmatched: this level of interactive development + good debugging tools + excellent implementation that compiles to fast machine code + fast startup for binaries + self-contained binaries + stable yet improving language, implementations and ecosystem + connect from a running program + commercial vendors if you need + … such a unique and productive set) (re. the type system: https://github.com/coalton-lang/coalton/ for a Haskell on top of CL now)
In Graphics livecoding in Common Lisp
Not everyone with ADHD struggles with small heap size. Even if I have a smaller total heap size (maybe), personally my hyper focus allows me to nearly dedicate all the heap space to the specific task at hand. I probably outperform neurotypical people here. I just can't have anything else in my head. Task switching kills me. So it is hard to say cause everyone is a bit different. For me the interactive, REPL-based workflow makes my ADHD brain very happy. Always having a program running is really nice. Plus immutability makes it much easier to reason about things. I do like static typing as well and I could see how it might help. I strongly believe that gradual typing allows for the best of two worlds, so that you can do both exploratory, interactive programming and type driven programming, depending on your needs. Not sure how well the sol
Read the rest
utions for gradual typing in Clojure work though. I have only experience with Common Lisp. Coalton might the exactly what you need: https://github.com/coalton-lang/coalton
In Why Clojure?
Coalton [1] is a Lisp language that has Hindley-Milner type inference with type classes. Its syntax actually resembles the prototype syntax from TFA pretty closely. The Coalton syntax-equivalent would be: (define-type (Option :a) (Some :a) None) (let ((x (Some 5))) (match x ((Some y) y) ((None) (random)))) (declare random (Distribution :a => Unit -> :a)) (define (random) (sample (thread-rng))) (define-class (Eq :t) (= (:t -> :t -> Boolean))) (define-instance (Eq Number) (define (= lhs rhs) (num-equal lhs rhs))) Of course types and classes like Option and Eq are built-in already. Coalton is based on Common Lisp (and allows free mixing with CL code) instead of Scheme however, though Coalton is a Lisp-1 and would feel relatively at-home to any Scheme pro
Read the rest
In Why I'm writing a Scheme implementation in 2025: Async Rust
Why "nearly"? Given how symbols are uppercased upon read in CL, 'string and 'String are actually the same symbol. I just checked: `(typecase "" (String 2) (otherwise 3))` returns 2, as expected. I'm less sure about the `defmethod`s, but I think they'll also work. Plus, the capitalized type name reminded me of Coalton[1], which is an internal DSL for CL that implements ML-style type system. There, the dispatch on a type (conventionally named by a capitalized symbol) happens statically. [1] https://github.com/coalton-lang/coalton
In OpenLDK: A Java JIT compiler and runtime in Common Lisp

Showing the 15 most recent of 72 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.