husk-scheme: R5RS Scheme interpreter program and library.

[ compilers-interpreters, language, library, mit, program ] [ Propose Tags ]

Husk is a dialect of Scheme written in Haskell that implements a subset of the R5RS standard. Husk is not intended to be a highly optimized version of Scheme. Rather, the goal of the project is to provide a tight integration between Haskell and Scheme while at the same time providing a great opportunity for deeper understanding of both languages. In addition, by closely following the R5RS standard the intent is to develop a Scheme that is as compatible as possible with other R5RS Schemes. This package includes a stand-alone executable as well as a library that allows an interpreter to be embedded within an existing Haskell application.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 1.0, 1.1, 1.2, 1.3, 2.0, 2.1, 2.2, 2.3, 2.4, 3.0, 3.1, 3.2, 3.2.1, 3.3, 3.4, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.5.1, 3.5.2, 3.5.2.1, 3.5.2.2, 3.5.2.3, 3.5.3, 3.5.3.1, 3.5.3.2, 3.5.4, 3.5.5, 3.5.6, 3.5.7, 3.6, 3.6.1, 3.6.2, 3.6.3, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14, 3.15, 3.15.1, 3.15.2, 3.16, 3.16.1, 3.17, 3.17.1, 3.18, 3.19, 3.19.1, 3.19.2, 3.19.3, 3.20
Dependencies array, base (>=2.0 && <5), containers, haskeline, haskell98, mtl, parsec [details]
License MIT
Author Justin Ethier
Maintainer Justin Ethier <github.com/justinethier>
Category Compilers/Interpreters, Language
Home page https://github.com/justinethier/husk-scheme
Uploaded by JustinEthier at 2010-12-01T03:48:59Z
Distributions
Reverse Dependencies 3 direct, 0 indirect [details]
Executables huski
Downloads 38332 total (88 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for husk-scheme-1.1

[back to package description]

husk is a dialect of Scheme written in Haskell that implements a subset of the R5RS standard. Husk is not intended to be a highly optimized version of Scheme. Rather, the goal of the project is to provide a tight integration between Haskell and Scheme while at the same time providing a great opportunity for deeper understanding of both languages. In addition, by closely following the R5RS standard the intent is to develop a Scheme that is as compatible as possible with other R5RS Schemes.

Scheme is one of two main dialects of Lisp. Scheme follows a minimalist design philosophy: the core language consists of a small number of fundamental forms, which may be used to implement the other built-in forms. Scheme is an excellent language for writing small, elegant programs, and may also be used to write scripts or embed scripting functionality within a larger application.

Feature List

husk includes the following features:

  • Most primitive data types and their standard forms (TODO: which are? string, char, etc)
  • Conditionals: if, case, cond
  • Assignment operations
  • Sequencing: begin
  • Iteration: do
  • Quasi-quotation
  • Delayed Execution: delay, force
  • Binding constructs: let, named let, let*, letrec
  • Basic IO functions
  • Standard library of Scheme functions
  • Read-Eval-Print-Loop (REPL) interpreter, with input driven by Haskeline
  • Proper tail recursion
  • Full numeric tower - includes support for parsing/storing types (exact, inexact, etc), support for operations on these types as well as mixing types, other constraints from spec.
  • Hash tables, as specified by SRFI 69
  • Hygenic Macros: High-level macros via define-syntax - Note this is still a heavy work in progress and while it works well enough that many derived forms are implemented in our standard library, you may still run into problems when defining your own macros.

husk scheme is available under the MIT license.

Usage

The interpreter may be invoked by running it directly from the command line:

./huski

Alternatively, you may run an individual scheme program:

./huski my-scheme-file.scm

A Haskell API is also provided to allow you to embed a Scheme interpreter within a Haskell program. The key API modules are:

  • Scheme.Core - Contains functions to evaluate (execute) Scheme code.
  • Scheme.Types - Contains Haskell data types used to represent Scheme primitives.

For more information, run make doc to generate API documentation from the source code. Also, see shell.hs for a quick example of how you might get started.

Development

The following packages are required to build husk scheme:

  • GHC - Or at the very least, no other compiler has been tested.

  • cabal-install may be used to build, deploy, and generate packages for husk.

  • Haskeline - which may be installed using cabal:

    cabal install haskeline

The 'scm-unit-tests' directory contains unit tests for much of the scheme code. Tests may be executed via 'make test'

The examples directory contains example scheme programs.

Credits

husk scheme is developed by Justin Ethier.

The interpreter is based on the code from the book Write Yourself a Scheme in 48 Hours written by Jonathan Tang and hosted / maintained by Wikibooks.

If you would like to request changes, report bug fixes, or contact me, visit the project web site at GitHub.