The Design and Implementation of a Functional Shell
Shells provide some sort of a language to interface with the operating
system. Unfortunately, they tend to have ugly, and redundant syntax,
combined with primitive expressive power. There is little or no typing
of the objects manipulated by the shell language, making type errors
common. They have entirely missed the developments in language
technology of the last 20 years.
In this project you will design and implement a shell. It should
be expressive, have clean syntax in the style of Haskell. You
should design a simple type system for the language.
Expectations
-
Core requirements:
-
You should implement at least a basic functional shell. This would
require the design of a suitable syntax and type system, based on
Haskell. The shell, at minimum, should have control constructs, in
the style of Haskell.
-
The pipes of a traditional shell may be expressed as function
composition, which implies commands should have function type.
-
You shell shouuld certainly be able to provide variables, and file
system objects should be values of some kind.
-
Further shell features should be proposed.
-
Extra tasks for the ambitious:
-
Your shell should provide fine-grained typing of file system objects.
-
A semantics of job control would be good for the ambitious.
-
You may adapt the composition of shell code and compiled code, in
the style of Esther.
References
Last modified : Wed Jan 4 14:44:36 EST 2006