@hackage LambdaShell0.9

Simple shell for evaluating lambda expressions

The Lambda Shell -==================-

== What is it?

It is a feature-rich shell environment and command-line tool for evaluating terms of the pure, untyped lambda calculus. The Lambda Shell builds on the shell creation framework Shellac, and showcases most of Shellac's features.

Features: -- evalutate lambda terms directly from the shell prompt using normal or applicative order. In normal order, one can evaluate to normal form, head normal form, or weak head normal form. -- define aliases for lambda terms using a top level, non-recursive 'let' construct. -- Show traces of term evaluation, or dump the trace to a file -- Count the number of reductions when evaluating terms -- test two lambda terms for confluence (that is; if two terms, when evaluated to normal form, are alpha equivalant) -- programs can be entered from the command line (using the -e option) or piped into stdin (using the -s option) -- perform Continuation Passing Style (CPS) transforms on terms before evaluation using the syntax '[[ five ]]'

An example session:

$ lambdaShell

The Lambda Shell, version 0.3 Copyright 2005-2006, Robert Dockins

The Lambda Shell comes with ABSOLUTELY NO WARRANTY; for details type ':nowarranty'. This is free software, and you are welcome to redistribute it under certain conditions; type ':gpl' for details

(\x y. x) (\a. a) (\b. b) \a. a :load prelude.lam :show four four = succ three four \f x. f (f (f (f x))) mul two three \f x. f (f (f (f (f (f x))))) let x = plus six two x == eight equal x == nine not equal one \f x. f x [[ one ]] \f k. k (\x k_0. f x k_0) :showcount showcount on sub seven two \f x. f (f (f (f (f x)))) <<90 reductions>> let l = insertSort (cons two (cons three (cons one nil))) index zero l one <<463 reductions>> index one l two <<2135 reductions>> index two l three <<5720 reductions>> :quit


== Why do I care?

Because you are a lambda calculus nut, and you just can't get enough. Or, the lambda shell could be a worthwhile teaching tool. The command line features (especially confluence testing) could lend themselves to automatic grading. Also, the lambda shell is a good example of how to write a shell using Shellac.

== How is it licensed?

The Lambda Shell is licensed under the GNU GPL version 2. See the LICENSE file for details.

== How do I build it?

The lambda shell uses a Cabal build system. The follwing commands assume you have a haskell interpreter in your system path named 'runhaskell'. All commands are run from this directory. If Shellac is installed as a user package, you will need to add the '--user' flag to your configure commands.

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/ runhaskell Setup.hs build runhaskell Setup.hs install --user

== Who is responsable for this mess?

You can send bug reports, rants and comments to:

Robert Dockins