An implementation of Python's doctest for Haskell
Pull request Compare This branch is 227 commits behind sol:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Doctest: Test interactive Haskell examples

doctest is a small program, that checks examples in Haddock comments. It is similar to the popular Python module with the same name.


doctest is available from Hackage. Install it, by typing:

cabal install doctest

Make sure that Cabal's bindir is on your PATH.

On Linux:

export PATH="$HOME/.cabal/bin:$PATH"

On Mac OS X:

export PATH="$HOME/Library/Haskell/bin:$PATH"

On Windows it's C:\Documents And Settings\user\Application Data\cabal\bin.

Fore more information, see the section on paths in the Cabal User Guide.


Below is a small Haskell module. The module contains a Haddock comment with some examples of interaction. The examples demonstrate how the module is supposed to be used.

module Fib where

-- | Compute Fibonacci numbers
-- Examples:
-- >>> fib 10
-- 55
-- >>> fib 5
-- 5
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)

(A comment line starting with >>> denotes an expression. All comment lines following an expression denote the result of that expression. Result is defined by what an REPL (e.g. ghci) prints to stdout and stderr when evaluating that expression.)

With doctest you may check whether the implementation satisfies the given examples, by typing:

doctest Fib.hs

You may produce Haddock documentation for that module with:

haddock -h Fib.hs -o doc/

Using GHC extensions

The easiest way to tell Doctest about GHC extensions is to use LANGUAGE pragmas in your source files.

Alternatively you can pass any GHC options to Doctest with --optghc.

doctest --options=-cpp Foo.hs

Hiding examples from Haddock

You can put examples into named chunks, and not refer to them in the export list. That way they will not be part of the generated Haddock documentation, but Doctest will still find them.

Development Build Status

Join in at #hspec on freenode.

Discuss your ideas first, ideally by opening an issue on GitHub.

Add tests for new features, and make sure that the test suite passes with your changes.

cabal configure --enable-tests && cabal build && cabal test

List of Contributors

See the list of contributors.