A simple four-function visual calculator, implemented in Haskell.
This calculator is capable of evaluating (and visualizing) arithmetic expressions such as "
1+1" or "
- natural numbers (of arbitrary size);
- addition, subtraction, multiplication, and division;
- sub-expressions nested within parentheses;
- unary negation.
The implementation includes:
- Data structures for encoding arithmetic expressions as trees (see
- Functions for parsing arithmetic expressions from textual input (see
- Functions for pretty-printing arithmetic expressions (see
- Functions for evaluating arithmetic expressions (see
- A simple command-line interface (see
- A simple graphical user interface (see
- A simple demonstration of using a GADT to restrict the shape of a tree-based data structure (the
This project supports both GHC and GHCJS.
The dependencies for GHC and GHCJS are slightly different.
Building with GHC
On Debian-based systems, first install the following dependencies:
Then issue the following commands:
stack setup stack build
Running the command line interface
The command line interface is built with GHC.
To run it, issue the following command:
stack exec calculator-cli
Building the web-based graphical user interface
The web interface is built with GHCJS.
First ensure that you have a recent version of NodeJS installed. (Version 6.6.0 or later should work.)
If the build is successful, it will notify you of where you can find the build output. For example:
Open the following file with your web browser to view the graphical user interface: /path/to/haskell/calculator/.stack-work/install/x86_64-linux/lts-7.15/ghcjs-0.2.1.9007015_ghc-8.0.1/bin/calculator-gui.jsexe/index.html
Copy and paste the final line into your web browser to view the user interface.
Running the test suite
The test suite is built with GHC.
To run the suite, issue the following command:
Experimenting with the calculator library
To load the calculator library into GHCI, issue the following command: