The mikrokosmos package

[Tags:gpl, program]

A didactic untyped lambda calculus interpreter.


[Skip to Readme]

Properties

Versions 0.1.0, 0.2.0
Dependencies ansi-terminal, base (>=4.7 && <5), containers (>=0.5), haskeline (>=0.7), HUnit (>=1.0), mtl (>=2.2), multimap, parsec (>=3) [details]
License GPL-3
Author Mario Román (M42)
Maintainer mromang08+github@gmail.com
Category Language
Home page https://github.com/M42/mikrokosmos
Bug tracker https://github.com/M42/mikrokosmos/issues
Source repository head: git clone git://github.com/M42/mikrokosmos.git
Uploaded Wed Sep 28 18:48:53 UTC 2016 by mroman42
Distributions NixOS:0.2.0
Downloads 69 total (12 in the last 30 days)
Votes
0 []
Status Docs not available [build log]
Last success reported on 2016-11-19 [all 3 reports]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for mikrokosmos

Readme for mikrokosmos-0.2.0

mikrokosmos

Mikrokosmos is an untyped lambda calculus interpreter, borrowing its name from the series of progressive piano études Mikrokosmos written by Bela Bartok. It aims to provide students with a tool to learn and understand lambda calculus. If you want to start learning about lambda calculus, I suggest you to read:

And to install and to tinker with this interpreter.

Installation

Mikrokosmos is installable from Hackage; you can install it directly from cabal:

cabal update
cabal install mikrokosmos

You can also install it by cloning the git repository and using cabal:

git clone https://github.com/M42/mikrokosmos.git
cd mikrokosmos
cabal install

If you have ghc version 8 or greater you can also compile it directly using:

git clone https://github.com/M42/mikrokosmos.git
cd mikrokosmos
ghc Main.hs

First steps

Once installed, you can open the interpreter typing mikrokosmos in your terminal. It will show you a prompt where you can write lambda expressions to evaluate them:

First steps

You can write expressions using \var. to denote a lambda abstraction on the var variable and you can bind names to expressions using =. As you can see in the image, whenever the interpreter finds a known constant, it labels the expression with its name.

If you need help at any moment, you can type :help into the prompt to get a summary of the available options:

Help screen

The standard library

Mikrokosmos comes bundled with a standard library in a file called std.mkr; if it was not the case for you, you can download the library from the git repository. It allows you to experiment with Church encoding of booleans, integers and much more. You can load it with :load std.mkr, given the file is in your working directory; after that, you can use a lot of new constants:

Standard library

All this is written in lambda calculus! You can check the definitions on the std.mkr file.

Debugging and verbose mode

If you want to check how the lambda reductions are being performed you can use the verbose mode. It can be activated and deactivated writing :verbose, and it will show you every step on the reduction of the expression, coloring the substitution at every step.

Verbose mode

It uses DeBruijn notation to show the substitutions, because this is the internal representation used by the interpreter. The term in red is being substituted by the term in yellow.

Advanced data structures

There are representations of structures such as linked lists or trees in the standard library. You can use them to do a bit of your usual functional programming:

Trees

Oh! And you can insert comments with #, both in the interpreter and in the files the interpreter can load.

References & interesting links