Haschoo: Minimalist R5RS Scheme interpreter

[ bsd3, compilers-interpreters, deprecated, program ] [ Propose Tags ]

Haschoo is a minimalist R5RS interpreter written in Haskell for a university course.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.0, 0.1, 0.1.1, 0.1.2
Dependencies array (>=0.4 && <0.5), base (>=4 && <5), list-tries (>=0.1 && <0.5), monad-loops (>=0.3 && <0.4), mtl (>=1.1 && <2.2), numbers (>=2009.5.28 && <3000.1), parsec (>=2.1 && <3.2) [details]
License BSD-3-Clause
Author Matti Niemenmaa
Maintainer Matti Niemenmaa <matti.niemenmaa+haschoo@iki.fi>
Category Compilers/Interpreters
Home page http://iki.fi/matti.niemenmaa/misc-projects.html#haschoo
Uploaded by MattiNiemenmaa at 2012-05-23T12:21:49Z
Reverse Dependencies 1 direct, 0 indirect [details]
Executables haschoo
Downloads 3838 total (12 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Successful builds reported [all 13 reports]

Readme for Haschoo-0.1.2

[back to package description]
Haschoo: the Scheme interpreter to be sneezed at

Haschoo is a little R5RS [1] interpreter written in Haskell for a university
course. The name, if it's not obvious, is a portmanteau of "Haskell", "Scheme",
and "achoo", the last of which is meant to signify something along the lines of
it being a sneeze's worth of code and not a particularly serious endeavour.

For licensing information, see LICENSE.txt.


Haschoo is quite spartan. It doesn't understand any command line options: if
given no parameters, it becomes a REPL which terminates on end-of-file,
otherwise it runs the file named by each argument as a standalone Scheme


Haschoo is not written in standard Haskell 98, but depends on GHC-only (at the
time of writing) compiler extensions, so you'll need GHC to build it. Get it at
http://www.haskell.org/ghc/; version 6.10.2 was used for testing, but later
6.10 versions should work as well.

Nowadays you can also try the Haskell Platform, intended as a simple installer
to get you started quickly: http://hackage.haskell.org/platform/

If you have the cabal-install tool installed ([2] or the Haskell Platform),
installing Haschoo without downloading it manually should be as simple as:

cabal install Haschoo

If you've already got Haschoo downloaded, and you have cabal-install, try:

cabal configure
cabal build
cabal install

If you don't have cabal-install, the following commands, run from Haschoo's root
directory, should also work:

runhaskell Setup.hs configure
runhaskell Setup.hs build
runhaskell Setup.hs install


If Haschoo can be said to have had a goal, it is minimalism: it tries to be a
bit of a DeathStation 9000 (see e.g. [3]) for R5RS. Currently it achieves this
in the following ways:

- No non-R5RS procedures are implemented or recognized.
- No extensions are made to existing R5RS procedures.
- Only two optional procedures are implemented: - and / for more than two
- Literal lists, strings, and vectors are immutable, as allowed by R5RS 3.4.

The basic idea was that if something works in Haschoo, it should work in any
R5RS system. That's not quite the current situation, but it seems to be mostly
true, at least based on my limited testing.

Known bugs

Due to time and energy constraints I didn't manage to iron out the following:

- Continuations, regretfully, are not implemented at all.

- Nested ellipses in macros don't always work correctly.
  (e.g. tests/macros/nested-ellipses.scm)

- The "read" procedure doesn't work very well: due to annoying technical
  issues, it works by reading one character at a time and then trying to parse
  the string gathered thus far, stopping on a successful parse. Hence reading
  "-1" gives "-" followed by "1".

- Quasiquotation has some silly bugs. For example, `(1 2 . ,(list 3 4)) results
  in '(1 2 unquote (list 3 4)) instead of '(1 2 (list 3 4)).

No doubt there are many other lurking bugs. Time and energy constraints tend to
limit testing as well.


[1]: http://schemers.org/Documents/Standards/R5RS/
[2]: http://hackage.haskell.org/trac/hackage/wiki/CabalInstall
[3]: http://wikibin.org/articles/deathstation-9000.html