Agda: A dependently typed functional programming language and proof assistant

[ dependent-types, program ] [ Propose Tags ]

Agda is a dependently typed functional programming language: It has inductive families, which are similar to Haskell's GADTs, but they can be indexed by values and not just types. It also has parameterised modules, mixfix operators, Unicode characters, and an interactive Emacs interface (the type checker can assist in the development of your code).

Agda is also a proof assistant: It is an interactive system for writing and checking proofs. Agda is based on intuitionistic type theory, a foundational system for constructive mathematics developed by the Swedish logician Per Martin-Löf. It has many similarities with other proof assistants based on dependent types, such as Coq, Epigram and NuPRL.

This package includes both a command-line program (agda) and an Emacs mode. If you want to use the Emacs mode you can set it up by running agda-mode setup (see the README).

Note that the Agda library does not follow the package versioning policy, because it is not intended to be used by third-party packages.

[Skip to Readme]
Versions [RSS] [faq] 2.2.0, 2.2.2, 2.2.4, 2.2.6, 2.2.8, 2.2.10, 2.3.0,, 2.3.2,,, 2.4.0,,, 2.4.2,,,,,, 2.5.1,,, 2.5.2, 2.5.3, 2.5.4,,, 2.6.0,, 2.6.1,,,, 2.6.2 (info)
Change log CHANGELOG
Dependencies Agda (==2.4.2), array (>=0.1 && <0.6), base (>=4.2 && <4.8), binary (>=0.6 && <0.8), boxes (>=0.1.3 && <0.2), bytestring (>= && <0.11), containers (>=0.1 && <0.6), data-hash (==, deepseq (==1.3.*), directory (>=1.0 && <1.3), equivalence (>=0.2.4 && <0.3), filepath (>=1.1 && <1.4), geniplate (>= && <0.7), hashable (>= && <1.2 || >= && <1.3), hashtables (>=1.0 && <1.2), haskeline (==0.7.*), haskell-src-exts (>=1.9.6 && <1.16), mtl (>=2.1.1 && <2.3), old-time (>=1.0 && <1.2), parallel (<3.3), pretty (>=1.0 && <1.2), process (>= && <1.3), QuickCheck (>=2.7.5 && <2.8), STMonadTrans (>=0.3.2 && <0.4), strict (>=0.3.2 && <0.4), text (>=0.11 && <1.3), time (==1.4.*), transformers (>=0.3 && <0.5), unordered-containers (==0.2.*), Win32 (>=2.2 && <2.4), xhtml (==3000.2.*), zlib (>= && <0.6) [details]
License LicenseRef-OtherLicense
Author Ulf Norell, Andreas Abel, Nils Anders Danielsson, Makoto Takeyama, Catarina Coquand, with contributions by Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, James Chapman, Jesper Cockx, Dominique Devriese, Peter Divanski, Fredrik Nordvall Forsberg, Olle Fredriksson, Daniel Gustafsson, Patrik Jansson, Alan Jeffrey, Wolfram Kahl, Fredrik Lindblad, Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin, Nicolas Pouillard, Andres Sicard-Ramirez, Andrea Vezzosi and many more.
Maintainer Ulf Norell <>
Revised Revision 2 made by AndreasAbel at 2014-09-09T17:02:20Z
Category Dependent types
Home page
Bug tracker
Source repo head: git clone
this: git clone 2.4.2)
Uploaded by UlfNorell at 2014-08-29T07:52:35Z
Distributions Arch:2.6.2, Debian:, Fedora:2.6.1, FreeBSD:, LTSHaskell:2.6.2, NixOS:2.6.2, Stackage:2.6.2
Executables agda-mode, agda
Downloads 46309 total (354 in the last 30 days)
Rating 2.75 (votes: 8) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user [build log]
All reported builds failed [all 1 reports]





Install the Epic compiler.


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees


Readme for Agda-2.4.2

[back to package description]

Agda 2

Table of contents:

Note that this README only discusses installation of Agda, not its standard library. See the Agda Wiki for information about the library.


You need recent versions of the following programs/libraries:

  • GHC:
  • cabal-install:
  • Alex:
  • Happy:
  • cpphs:
  • GNU Emacs:

You should also make sure that programs installed by cabal-install are on your shell's search path.

For instructions on installing a suitable version of Emacs under Windows, see [below]((#installing-emacs-under-windows).

Non-Windows users need to ensure that the development files for the C libraries zlib and ncurses are installed (see and Your package manager may be able to install these files for you. For instance, on Debian or Ubuntu it should suffice to run

apt-get install zlib1g-dev libncurses5-dev

as root to get the correct files installed.

Note on ghc's CPP language extension

Recent versions of Clang's preprocessor don't work well with Haskell. In order to get some dependencies to build, you may need to set up Cabal to have ghc use cpphs by default. You can do this by adding

  ghc-options: -pgmPcpphs -optP--cpp

to your .cabal/config file. (You must be using cabal >= 1.18. Note that some packages may not compile with this option set.)

You don't need to set this option to install Agda from the current development source; Agda.cabal now uses cpphs.

Installing Agda

There are several ways to install Agda:

Using a binary package prepared for your platform

Recommended if such a package exists. See the Agda Wiki.

Using a released source package from Hackage

Install the prerequisites mentioned below, then run the following commands:

cabal update
cabal install Agda
agda-mode setup

The last command tries to set up Emacs for use with Agda. As an alternative you can copy the following text to your .emacs file:

(load-file (let ((coding-system-for-read 'utf-8))
                (shell-command-to-string "agda-mode locate")))

It is also possible (but not necessary) to compile the Emacs mode's files:

agda-mode compile

This can, in some cases, give a noticeable speedup.

WARNING: If you reinstall the Agda mode without recompiling the Emacs Lisp files, then Emacs may continue using the old, compiled files.

Using the development version of the code

You can obtain tarballs of the development version from the Agda Wiki, or clone the repository.

Install the prerequisites discussed in Prerequisites.

Then, either:

(1a) Run the following commands in the top-level directory of the Agda source tree to install Agda:

cabal update
cabal install

(1b) Run agda-mode setup to set up Emacs for use with Agda. Alternatively, add the following text to your .emacs file:

(load-file (let ((coding-system-for-read 'utf-8))
                (shell-command-to-string "agda-mode locate")))

It is also possible (but not necessary) to compile the Emacs mode's files:

agda-mode compile

This can, in some cases, give a noticeable speedup.

WARNING: If you reinstall the Agda mode without recompiling the Emacs Lisp files, then Emacs may continue using the old compiled files.

(2) Or, you can try to install Agda (including a compiled Emacs mode) by running the following command:

make install

Configuring the Emacs mode

If you want to you can customise the Emacs mode. Just start Emacs and type the following:

M-x load-library RET agda2-mode RET
M-x customize-group RET agda2 RET

This is useful if you want to change the Agda search path, in which case you should change the agda2-include-dirs variable.

If you want some specific settings for the Emacs mode you can add them to agda2-mode-hook. For instance, if you do not want to use the Agda input method (for writing various symbols like ∀≥ℕ→π⟦⟧) you can add the following to your .emacs:

(add-hook 'agda2-mode-hook
          '(lambda ()
            ; If you do not want to use any input method:
            ; (In some versions of Emacs you should use
            ; inactivate-input-method instead of
            ; deactivate-input-method.)

            ; If you want to use the X input method:
            (set-input-method "X")))

Note that, on some systems, the Emacs mode changes the default font of the current frame in order to enable many Unicode symbols to be displayed. This only works if the right fonts are available, though. If you want to turn off this feature, then you should customise the agda2-fontset-name variable.

Installing the Epic backend's dependencies

The Epic backend is experimental and requires that the Epic program is installed. You can install this program by giving the epic flag to cabal (but note that, at the time of writing, the Epic program does not build with certain recent versions of GHC):

Installing from Hackage:

cabal update
cabal install Agda -fepic
agda-mode setup

Installing from development sources using cabal

cabal update
cabal install -fepic
agda-mode setup

Installing from development sources using make

make CABAL_OPTIONS=-fepic install

You can also install Epic directly:

cabal install epic

Note that Epic depends on other software:

  • The Boehm garbage collector:
  • The GNU Multiple Precision Arithmetic Library:
  • GCC, the GNU Compiler Collection:

For more information about Epic:

Installing Emacs under Windows

A precompiled version of Emacs 24.3, with the necessary mathematical fonts, is available at