Haskell is powerful but impractical. Elm is practical but limited. Roc aims to be both — a fast functional language for real apps.
What Is Roc?
Roc is a functional programming language focused on speed, friendliness, and practicality. Created by Richard Feldman (Elm core team), it compiles to machine code and interops with any language through platforms.
app [main] { pf: platform "https://github.com/roc-lang/basic-cli/..." }
import pf.Stdout
main =
Stdout.line! "Hello from Roc!"
Why Roc
1. Fast — Compiles to LLVM machine code. No garbage collector pauses — uses reference counting.
2. No runtime exceptions — The type system eliminates null, undefined, and unhandled errors:
# Result type for operations that can fail
parseAge : Str -> Result U32 [InvalidAge]
parseAge = \input ->
when Str.toU32 input is
Ok age if age > 0 && age < 150 -> Ok age
_ -> Err InvalidAge
3. Platform model — Roc doesn't have a runtime. It plugs into "platforms" that provide I/O:
-
basic-cli— command-line apps -
basic-webserver— HTTP servers -
basic-graphics— GUI apps
4. No side effects in pure code — all I/O is explicit through the ! suffix.
5. Friendly errors — Roc's error messages explain what went wrong AND suggest fixes.
Comparison
| Feature | Haskell | Elm | Roc |
|---|---|---|---|
| Performance | Good | JS-speed | Excellent (native) |
| Learning curve | Steep | Gentle | Gentle |
| Platform | Server/CLI | Browser only | Any (platform model) |
| Side effects | Monads | Cmd/Sub | Task with ! |
Building functional applications? Check out my developer tools or email spinov001@gmail.com.
Top comments (0)