hica is a safe, expression-oriented language with a functional style and familiar syntax.
Features include:
- Hindley-Milner type inference
- Algebraic effects
- Expression-oriented design
- No nulls or unchecked exceptions
- Compilation to C, JavaScript, and WASM
Under the hood, hica is implemented in Koka and inherits Koka's algebraic effect system and Perceus memory management.
hica stands for Hindley-Milner Inference Compiler with Algebraic effects.
Visit hica's website for a tour of the language.
- Safe by default – no null, no unhandled exceptions; errors are values (
Result,Maybe). - Expression-oriented – everything returns a value:
if,match, and blocks are all expressions. - Functional-first – immutability by default, higher-order functions, and pattern matching at the core.
- Minimal ceremony – Hindley-Milner type inference means you rarely write annotations; the language gets out of your way.
- Effect tracking – side effects (I/O, state, exceptions) are tracked by the type system, not buried in function bodies.
- Predictable memory management – inherited from Koka's Perceus reference counting; no GC pauses, no manual allocation.
- Familiar syntax – curly braces,
let,fun,match,if, and the=>expression-bodied shorthand.
Linux / macOS / Chromebook:
curl -fsSL https://www.hica.dev/install.sh | shThis installs the latest release binary to ~/.local/bin. Override with HICA_INSTALL_DIR:
curl -fsSL https://www.hica.dev/install.sh | HICA_INSTALL_DIR=/usr/local/bin shWindows (PowerShell):
irm https://www.hica.dev/install.ps1 | iexRequires Koka ≥ 3.2.
git clone https://github.com/cladam/hica.git
cd hica
make releaseCreate a file hello.hc:
fun main() {
println("Hello, world")
}Then run it:
hica run hello.hcOther common commands:
# Compile to a binary
hica build hello.hc -o hello
# Type-check without emitting
hica check hello.hc
# Format source
hica fmt hello.hcfun double(x) => x * 2
fun main() {
let result = double(21)
result
}fun describe(x) => match x {
0 => "zero",
1 => "one",
_ => "many"
}fun apply(f, x) => f(x)
fun main() {
let sq = (n) => n * n
apply(sq, 5)
}fun add(a: int, b: int) : int => a + b
fun main() {
let x: int = 42
println(add(x, 8))
}fun safe_divide(a, b) =>
if b == 0 { Err("division by zero") }
else { Ok(a / b) }
fun main() {
match safe_divide(10, 3) {
Ok(n) => println(n),
Err(e) => println(e)
}
}fun fizzbuzz(n) =>
if n % 15 == 0 { "fizzbuzz" }
else if n % 3 == 0 { "fizz" }
else if n % 5 == 0 { "buzz" }
else { show(n) }| Command | Description |
|---|---|
build |
Compile a file to a binary |
run |
Compile and run a file |
check |
Type-check source without emitting |
fmt |
Format source |
test |
Run tests in a file |
new |
Create a new project |
repl |
Start an interactive shell |
Run hica help <command> for details on any command.
- Koka – language with algebraic effects and Perceus memory management
- Rust – syntax, safety mindset, and the
matchexpression - F# – functional-first style, pipelines, and type inference ergonomics
- C# – the
=>expression-bodied shorthand and query syntax - Python – approachable, expressive lists and comprehensions
hica is under active development.
The language is usable today for experimentation and personal projects, but some features and APIs may change between releases.
hica aims to combine:
- the readability of Python,
- the safety mindset of Rust,
- the ergonomics of F#,
- and the algebraic effects of Koka,
while keeping a familiar curly-brace syntax.
.hc source → Lex → Parse → Desugar → Type Check → Emit Koka (.kk) → Koka Compiler → C/JS/WASM
Each phase is implemented as a Koka module using algebraic effects for compiler state (diagnostics, fresh type variables, symbol scopes).
| Component | Approach |
|---|---|
| Implementation | Koka 3.x |
| Parsing | Recursive descent with Pratt expression parsing |
| Type system | Hindley-Milner with unification |
| Name resolution | Declaration-aware marshalling (hc_ prefix) |
| CLI argument parsing | klap (clap-inspired, in-tree) |
| Memory management | Perceus (inherited from Koka target) |
| Backend target | Koka (.kk) → C / JS / WASM via Koka |
| Runtime | Koka standard library and runtime |
Apache License 2.0 – see LICENSE.
