Skip to content
Introduction to programming language theory in Agda.
Branch: dev
Clone or download
Pull request Compare This branch is 654 commits behind plfa:dev.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

layout title permalink

This book is an introduction to programming language theory, written in Agda. The authors are Wen Kokke and Philip Wadler.

Please send us comments! The text is currrently being drafted. The first draft of Part I will be completed before the end of March 2018. When that is done it will be announced here, and that would be an excellent time to comment on the first part.

The book was inspired by Software Foundations, but presents the material in a different way; see the Preface.

How to host literate code

In directory run the following:

$ make clobber              (remove all files before rebuilding system)
$ make macos-setup          (might need sudo, but try it without first)
$ make build                (builds lagda->markdown and website)
$ make build-incremental    (builds lagda->markdown and website using incremental)
$ make server-start         (starts server in detached mode)
$ make server-stop          (stops the server, uses pkill)

The visible page appears at


Unicode abbreviations

\to    →
\u+    ⊎
\all   ∀
\x     ×
x\_1   x₁
x\_i   xᵢ

See agda-input.el for more details.

How to use agda-mode

?            create hole
{!...!}      create hole
C-c C-l      load buffer
C-c C-c x    split on variable x 
C-c C-space  fill in hole

See the emacs-mode docs for more details.


For an overview of the Markdown syntax, see the original description, the CommonMark project, or the version that is used in this book.


Checkout this repository with

git clone

You can check this worked:

bruichladdich$ cd
bruichladdich$ git status
On branch dev
Your branch is up-to-date with 'origin/dev'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)


nothing added to commit but untracked files present (use "git add" to track)
You can’t perform that action at this time.