Project: M36 Relational Algebra Engine
Haskell Jupyter Notebook JavaScript HTML Python Shell C
Clone or download
Failed to load latest commit information.
.travis increase dependency installation timeout to 40 minutes Feb 1, 2018
cbits WIP fd leak testing Mar 26, 2018
docs update stack build advice Aug 11, 2018
examples remove example in preference of test Jun 13, 2018
jupyter use improved styling on jupyter notebooks Nov 23, 2017
posts WIP Atomable List instance and built-in List type Apr 13, 2017
scripts add join elimination static optimization Nov 26, 2017
src add missing quickcheck instances import Aug 11, 2018
test Merge branch 'master' into support_ghc_8.2 Aug 10, 2018
.appveyor.yml point appveyor at correct stack.yaml file Aug 10, 2018
.gitignore add jupyter junk to gitignore Nov 16, 2017
.travis.yml adjust travis.yml for 8.2 support Aug 10, 2018
Changelog.markdown update cabal file and changelog for v0.5 Aug 11, 2018
LICENSE Initial commit Oct 27, 2014
README.markdown update build instructions to reflect GHC 8.2 preference and stack lim… Aug 10, 2018
cabal.project more GHC 8 munging Jan 7, 2017 add some handy shell scripts for performance profiling and debugging Apr 17, 2017 add some handy shell scripts for performance profiling and debugging Apr 17, 2017 add some handy shell scripts for performance profiling and debugging Apr 17, 2017
project-m36.cabal remove custom arbitrary instance in preference to arbitrary-instances… Aug 11, 2018 add some handy shell scripts for performance profiling and debugging Apr 17, 2017
stack.ghc8.0.yaml add stack.yamls for GHC 8.2 Jan 31, 2018
stack.ghc8.2.yaml fix pinned older stm-containers version in stack lts-11.20 Aug 10, 2018


Ξ Project:M36 Relational Algebra Engine

Haskell Programming Language Public Domain Hackage Hackage dependency status Build status Windows Build status

Software can always be made faster, but rarely can it be made more correct.


Project:M36 implements a relational algebra engine as inspired by the writings of Chris Date.


Unlike most database management systems (DBMS), Project:M36 is opinionated software which adheres strictly to the mathematics of the relational algebra. The purpose of this adherence is to prove that software which implements mathematically-sound design principles reaps benefits in the form of code clarity, consistency, performance, and future-proofing.

Project:M36 can be used as an in-process or remote DBMS.

Project:M36 is written entirely in the Haskell programming language.

Sample Session


Try It!

You can experiment instantly with Project:M36 straight from your browser at!


Project:M36 supports multiple frontends which target different audiences.

  • learn about the relational algebra via TutorialD
  • store and manipulate databases
  • use Project:M36 as a native Haskell database backend



Introductory Materials

  1. Installation and Introduction to Project:M36
  2. Introduction to the Relational Algebra
  3. TutorialD via Jupyter Notebook Walkthrough
  4. TutorialD Tutorial
  5. 15 Minute Tutorial
  6. Developer's Change Log
  7. Simple Client API

Database Comparisons

  1. ACID Database Properties
  2. On NULL (in SQL)
  3. Reaching "Out of the Tarpit" with Project:M36

Advanced Features

  1. Transaction Graph Operators
  2. ProjectM36.Client Library
  3. Adding New Data Types
  4. Database-Manipulating Functions
  5. Serving Remote ProjectM36 Databases
  6. Using Notifications
  7. Merge Transactions
  8. Atom (Value) Functions
  9. Trans-Graph Relational Expressions
  10. Isomorphic Schemas
  11. Replication
  12. Basic Operator Benchmarks


  1. WebSocket Server
  2. Jupyter Notebook Kernel


Project:M36 is developed in Haskell and compiled with GHC 8.0.2 or later.

Related Projects

  • The Third Manifesto: the philosophical basis for relational algebra engines
  • Rel: a TutorialD implementation against a BerkeleyDB backend
  • Andl: a new database language with SQLite and PostgreSQL backends
  • Coddie: a python-based relational algebra interpreter

Suggested Reading