Disco is a programming language intended to teach basic functional
programming principles in the context of a discrete mathematics
If you just want to use disco (i.e. if you are a student), follow
these instructions. If you want to contribute to disco development,
you should skip to the instructions below about building with stack.
Follow the instructions to install
ghcup by opening a terminal or
command prompt and copy-pasting the given installation command. You
can just accept all the defaults. If you don't have Windows
Subsystem for Linux
(if you don't know what that is, then you don't have it), see the
instructions here for a
PowerShell command to run.
- If you use PowerShell, note that after running the magic
PowerShell command to set up
ghcup, you need to close and
reopen PowerShell in order for it to recognize the
cabal update, which will download the latest information about
cabal install disco at a command prompt.
Note that this may take a very long time, on the order of an
hour or so.
The good news is that most of this work only needs to be done
once, even if you later install an updated version of disco.
Even if installation fails partway through, the work already
completed up to that point need not be redone.
On OSX, if building fails with an error like
ghc: could not execute: opt, it means you need to install LLVM. The easiest
way to do this is to first follow the instructions to install
Homebrew (if you don't already have it), and
brew install llvm
at a terminal prompt.
If this fails with an error like
Could not resolve HEAD to a revision, then try running these two commands at a
rm -rf $(brew --repo homebrew/core)
brew tap homebrew/core
Then re-run the
brew install llvm command.
llvm, you may need to close and re-open
the terminal before running
cabal install disco again.
If it works, you should be able to now type
disco at a command
prompt, which should display a message like this:
Welcome to Disco!
A language for programming discrete mathematics.
If installation seems like it succeeded but the
disco command is
not recognized, it may be an issue with your path environment
variable settings. Try running
disco using an explicit path:
~/.cabal/bin/disco on Linux or OSX
C:\cabal\bin\disco on Windows
- If those don't work, poke around and see if you can figure
out where the
cabal/bin folder is on your computer, and
disco from there.
- If you wish, you may add the
cabal/bin folder (wherever it is
located) to your
Path (Windows) or
environment variable, so that you can run disco simply by typing
disco. However, this step is optional.
On Windows, if disco crashes with an error about
foldr after you
try to type anything (or if it simply closes the entire window when
you type anything), the problem is probably that you need to enable
Open a command prompt, and type
disco as before (by typing
C:\cabal\bin\disco or whatever worked).
You will have to do this every time you run disco.
Alternatively, you can create a file called
containing those two commands, for example:
Now you can simply double-click on
disco.cmd to run disco.
If you encounter any difficulties, please let me know --- either come
talk to me or open a GitHub
instructions will be kept up-to-date with whatever helpful tips or
workarounds I learn. So even if you encounter a difficulty but figure
out the solution youself, let me know --- that way I can include the
problem and solution here so others can benefit!
- Includes those features, and only those features, useful in the
context of a discrete math course. This is not intended to be a
- Syntax is as close to standard mathematical practice as possible,
to make it easier for mathematicians to pick up, and to reduce as
much as possible the incongruity between the language and the
mathematics being explored and modeled.
- Tooling, error messages, etc. are very important---the language
needs to be accessible to undergrads with no prior programming
experience. (However, this principle is, as of yet, only
that---there is no tooling or nice error messages to speak of.)
Feel free to look around, ask questions, etc. You can also
contribute---collaborators are most welcome.
Check out the disco IRC channel,
#disco-lang on Libera.Chat. If
you're not familiar with IRC, you can connect via this web client.
Documentation is hosted on
If you'd like to contribute to disco development, check out
Building with stack
First, make sure you have
(the easiest way to install it is via ghcup).
Then open a command prompt, navigate to the root directory of this
repository, and execute
After this completes, you should be able to
stack exec disco
to run the Disco command-line REPL.
While developing, you may want to use a command like
stack test --fast --file-watch --ghc-options='-Wall'
which will turn on warnings, turn off optimizations for a faster
edit-compile-test cycle, and automatically recompile and run the test
suite every time a source file changes.