explaingit

bracevac/eff

Analysis updated 2026-07-10 · repo last pushed 2016-12-02

OCamlAudience · researcherComplexity · 4/5DormantSetup · moderate

TLDR

Eff is a programming language built on algebraic effects, letting you handle side effects like state, exceptions, and backtracking through flexible, user-defined handlers. It uses OCaml syntax and runs on Unix-like systems.

Mindmap

mindmap
  root((repo))
    What it does
      Algebraic effects language
      User-defined handlers
      Mix and combine effects
    Tech stack
      OCaml syntax
      OPAM package manager
      Unix-like systems
    Use cases
      Experiment with effect systems
      Non-deterministic algorithms
      Custom backtracking
    Audience
      Language designers
      Researchers
      Functional programming fans
    Key traits
      OCaml-like type inference
      No effect tracking in types
      Example code included
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Experiment with algebraic effects and custom handlers in a working language.

USE CASE 2

Prototype non-deterministic algorithms or backtracking using first-class handlers.

USE CASE 3

Learn how effect systems work by modifying and extending example code.

USE CASE 4

Test functional programming ideas with OCaml syntax and type inference.

What is it built with?

OCamlOPAM

How does it compare?

bracevac/effastrada/google-drive-ocamlfusefacebook/pyre-check
Stars5,9237,156
LanguageOCamlOCamlOCaml
Last pushed2016-12-02
MaintenanceDormant
Setup difficultymoderatemoderatemoderate
Complexity4/53/53/5
Audienceresearcherops devopsdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · moderate Time to first run · 30min

Requires OPAM and an OCaml toolchain installed on a Unix-like system.

No license information is mentioned in the explanation.

In plain English

Eff is a programming language designed around a concept called "algebraic effects," which offers a cleaner way to handle side effects, things like reading input, updating state, or throwing exceptions, in functional programming. The core benefit is that it lets developers mix and combine different kinds of operations seamlessly, without wrestling with the layered complexity that typically arises in other functional languages. In most languages, side effects are built into the system in rigid ways. Here, they are treated as operations triggered by "handlers." Think of an exception handler that catches errors, now imagine that same idea expanded to handle state changes, backtracking, or transactions. A handler defines what happens when an operation fires, so programmers can define new effects, combine existing ones, and control how they behave, all from within the language itself. This would appeal to language designers, researchers, and functional programming enthusiasts who want to experiment with effect systems without fighting the language. A developer exploring non-deterministic algorithms or custom backtracking could use it as a testing ground, since those patterns are treated as first-class handlers rather than library add-ons. It reads like OCaml, same syntax, same static typing and type inference, so anyone familiar with the ML family of languages would feel at home quickly. One notable tradeoff: its type system deliberately ignores effect information, meaning types don't track which effects a function uses. That keeps things simpler and OCaml-like, but it means you won't get compile-time warnings about mismatched effects the way some other effect systems attempt. The project runs on Unix-like systems and installs through OPAM, OCaml's package manager, with example code in the repository to help newcomers get started.

Copy-paste prompts

Prompt 1
Help me install the Eff programming language on macOS using OPAM and run the example code from the repository.
Prompt 2
Write an Eff program that uses handlers to implement a simple stateful counter with get and set operations.
Prompt 3
Show me how to combine exception handling and state effects in Eff using custom handlers.
Prompt 4
Explain how Eff's algebraic effects compare to OCaml's native exception handling, and write a side-by-side example.
Prompt 5
Create an Eff handler that implements backtracking search for a simple puzzle, demonstrating non-determinism as a first-class effect.

Frequently asked questions

What is eff?

Eff is a programming language built on algebraic effects, letting you handle side effects like state, exceptions, and backtracking through flexible, user-defined handlers. It uses OCaml syntax and runs on Unix-like systems.

What language is eff written in?

Mainly OCaml. The stack also includes OCaml, OPAM.

Is eff actively maintained?

Dormant — no commits in 2+ years (last push 2016-12-02).

What license does eff use?

No license information is mentioned in the explanation.

How hard is eff to set up?

Setup difficulty is rated moderate, with roughly 30min to a first successful run.

Who is eff for?

Mainly researcher.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Verify against the repo before relying on details.