Lambdabot is a development tool and advanced IRC bot

Version on this page:5.0.3
LTS Haskell 3.22:5.0.3
Stackage Nightly 2015-12-08:5.0.3
Latest on Hackage:
GPL licensed by James Cook
Maintained by James Cook

Module documentation for 5.0.3

There are no documented modules for this package.

About Lambdabot

Lambdabot is an IRC bot written over several years by those on the Freenode #haskell IRC channel.

It operates as a command line tool, embedded in an editor, embedded in GHCi, via internet relay chat and on the web.


The easiest way to install lambdabot is from hackage, by the following commands:

cabal install --constraint 'transformers installed' lambdabot djinn
hoogle data

The second command fetches the data for Lambdabot's @hoogle command, which is a thin wrapper around the hoogle command line tool. Invoking lambdabot will (hopefully) display a lambdabot> prompt.

It is also possible to install lambdabot in a sandbox. In that case, use cabal exec lambdabot to launch lambdabot.


Some lambdabot modules maintain state. The state is stored in ./State/ if that directory exits; otherwise, it will end up on ~/.lambdabot/State/. State files of particular interest are:

  • Pristine.hs and L.hs: Environment for running Haskell code. The command @let adds new definitions to L.hs, whereas @undefine copies Pristine.hs to L.hs.
  • offlinerc: This file contains a history of commands typed into lambdabot's tty interface.


The state file Pristine.hs defines the environment in which Haskell code is run. To customize lambdabot's modules, unpack the lambdabot package

cabal unpack lambdabot; cd lambdabot-<version>

You can then edit src/Modules.hs to configure the loaded modules.

Using Lambdabot

Lambdabot has a number of modules, most of which provide several commands. Type @listmodules to obtain a list of module names, and then @list <module> to list a module's commands. Executing @help command displays a short description of the command.

The following sample session demonstrates some useful lambdabot commands.

lambdabot> > sum [1..10]
lambdabot> @let foo = 42
lambdabot> > product []
lambdabot> @undefine
    Not in scope:‘foo’
    Perhaps you meant ‘Data.Traversable.for’ (imported from Data.Traversable)
lambdabot> @type map
(a -> b) -> [a] -> [b]
lambdabot> @djinn (b -> c) -> (a -> b) -> a -> c
f a b c = a (b c)
lambdabot> @pl \x y z -> y z x
flip flip
lambdabot> @unpl flip flip
(\ b c f -> c f b)
lambdabot> @undo do x <- step1; step2; step3
step1 >>= \ x -> step2 >> step3

Further Information


* support ghc-8.0
* support haskell-src-exts 1.18+
* better oeis output
* #141, #149

lambdabot 5.1
* support for dependent-sum 0.3 (#130)
* IRC reconnect support (#125, by Nikolay Amiantov)
* unmtl parsing fix (#129, by Daniel Wagner)
* #131, #138, #139, #140, #142, #143

lambdabot 5.0.3
* compatibility with ghc-7.10: relax utf8-string upper bound
* numerous bugfixes (#121, #122, #123, #117, #98)

* update Changelog

* use QuickCheck-safe for @check command
* ship ghc version specific Pristen.hs files
* the dict plugin no longer looks up more than one word at a time

lambdabot 5.0.1
* update to monad-control-1.0
* if ./State/ exists, then state files are stored there even if a
corresponding file exists in ~/.lambdabot/State
comments powered byDisqus