Disco is a programming language intended to teach basic functional programming principles in the context of a discrete mathematics course.
If you just want to use disco (i.e. if you are a student, or just
checking out the language), the recommended way is to use it via
replit.com
. Simply visit this
REPL and follow the
instructions there to fork your own copy, where you will be able to
evaluate Disco expressions, and edit and run your own .disco
files,
all via your web browser, without installing anything on your computer.
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 readthedocs.io.
If you'd like to contribute to disco development, check out CONTRIBUTING.md.
First, make sure you have
the stack
tool
(the easiest way to install it is via ghcup).
Then open a command prompt, navigate to the root directory of this
repository, and execute
stack build
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.
If for some reasons you want to actually install disco
on your
computer, follow the below instructions. (If you want to contribute
to disco development, you should skip to the instructions about
building with stack.)
Note, if you are a student, you should not need to do this!
The above instructions about using disco
on replit.com
should be
all you need. The below instructions are kept here for completeness.
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.
ghcup
, you need to close and
reopen PowerShell in order for it to recognize the cabal
command.Run cabal update
, which will download the latest information about
Haskell packages.
Now run cabal install disco
at a command prompt.
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
then type
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
terminal prompt:
rm -rf $(brew --repo homebrew/core) brew tap homebrew/core
Then re-run the brew install llvm
command.
After installing 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.
Disco>
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 OSXC:\cabal\bin\disco
on Windowscabal/bin
folder is on your computer, and
run disco
from there.cabal/bin
folder (wherever it is
located) to your Path
(Windows) or PATH
(Linux/OSX)
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
UTF-8 mode.
Open a command prompt, and type
chcp 65001
Now start disco
as before (by typing disco
or
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 disco.cmd
containing those two commands, for example:
chcp 65001 C:\cabal\bin\disco
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 issue. These 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!