Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Hindley-Damas-Milner tutorial

This module is an extensively documented walkthrough for typechecking a basic functional language using the Hindley-Damas-Milner algorithm. In the end, we'll be able to infer the type of expressions like

find (λx. (>) x 0)
>>> :: [Integer] -> Either () Integer

It can be used in multiple different forms:

  • The source is written in literate programming style, so you can almost read it from top to bottom, minus some few references to later topics.

  • Loads of doctests (runnable and verified code examples) are included

  • The code is runnable in GHCi, all definitions are exposed.

  • A small main module that gives many examples of what you might try out in GHCi is also included.

  • The Haddock output yields a nice overview over the definitions given, with a nice rendering of a truckload of source code comments.

For Stack users

# Play around with it
stack ghci

# Run the main module
stack build --exec hindley-milner

# Build and view Haddocks
stack haddock --open hindley-milner

For Cabal users

# Installation
cabal sandbox init
cabal install --dependencies-only

# Play around with it
cabal repl

# Run the main module
cabal run

# Build and view Haddocks
cabal haddock
$BROWSER dist/doc/html/hindley-milner/index.html