
        Shellac 
-========================-


== What is it?

Shellac is a framework for building read-eval-print style shells.  
Shells are created by declaratively defining a set of shell commands
and an evaluation function.  Shellac supports multiple shell backends,
including a 'basic' backend which uses only Haskell IO primitives and
a full featured 'readline' backend based on the the Haskell readline
bindings found in the standard libraries.

This library attempts to allow users to write shells at a high level
and still enjoy the advanced features that may be available from a
powerful line editing package like readline.


== Why do I care?

Shellac takes care of much the muckety-muck of writing robust, 
feature-full shells so you don't have to.


== How is it licensed?

Shellac is available under a BSD3 license.  See the LICENSE file for
details.

Be aware, however, that the GNU readline library itself is
licensed under the GPL.  If you wish to use the readline bindings,
your project will need to be GPL compatible.

Go here (http://directory.fsf.org/GNU/readline.html) for more information
about the readline library.


== What about portability?

Currently, Shellac is GHC only.  The 0.5 release made significant
efforts toward portability by eliminating dependencies on the GHC
specific features GADTs and STM.  However, it still requires
existential types, multi-parameter type classes, functional
dependencies, preemptive concurrency support and the FFI.  Currently no
Haskell implementation other than GHC supports all these features.

== How do I build it?

Shellac uses a Cabal build system.  The following commands
assume you have a Haskell interpreter in your system
path named 'runhaskell'.  All commands are run from
this directory.

To install for the whole system:

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

To install for a single user:

runhaskell Setup.hs configure --prefix=/home/<username>
runhaskell Setup.hs build
runhaskell Setup.hs install --user

To build the API docs:

runhaskell Setup.hs haddock


== Why 'Shellac'?

I had to call it something.  And it starts with 'shell'.


== Who is responsible for this mess?

You can send bug reports, rants and comments to:

  Robert Dockins <robdockins AT fastmail.fm>
