------------------------------------------------------------------------------
StrategyLib --- a library for generic programming with functional strategies
README file
Table of contents
- Cross references (files with further information)
- Subdirectories of the source distribution
- Prerequisites for using the library and running examples
- Checking the installation (just do a "gmake check")
- Targets used by Makefile system
- Supported models of functional strategies
-
------------------------------------------------------------------------------
Cross references
----------------
AUTHORS --- authors of Strafunski
COPYING --- BSD-style copyright
INTALL --- recommeneded versions of hugs/ghc/ghci/DrIFT
VERSION --- version of StrategyLib
ChangeLog --- changes compared to previous version
TODO --- issues to be addressed in the future
------------------------------------------------------------------------------
Subdirectories of the source distribution
-----------------------------------------
library --- implementation of functional strategies and StrategLib's themes
models --- different models of functional strategies
scripts --- reusable scripts (mainly includes for Makefiles)
examples --- examples of using functional strategies
------------------------------------------------------------------------------
Prerequisites for using the library and running examples
--------------------------------------------------------
Either ghc or hugs or both, and maybe DrIFT.
See the file INSTALL for details.
------------------------------------------------------------------------------
Checking the installation
-------------------------
Just type in "gmake check" which provides you with a list of options
to check the distribution in different ways. The options differ
regarding the used Haskell implementations and regarding the fact
whether derived modules are to be regenerated with DrIFT or the
shipped versions will be used as is.
-------------------------------------------------------------------------------
Targets used by Makefile system
-------------------------------
You don't need to "make" anything since this is a source distribution,
but there are some make targets to run examples and do other things.
In applications of StrategyLib, one is encouraged to reuse some includes
for Makefiles as provided in subdirectory "scripts".
Targets in examples/*/Makefiles:
run-hugs --- run Main.hs with hugs
run-ghci --- run Main.hs with ghci
run-ghc --- run Main.hs with ghc
derive --- run DrIFT if needed
Recursive clean targets:
clean --- remove backup files, object code, etc.
very-clean --- also remove modules generated by DrIFT
Targets in the top-level Makefile:
check --- list detailed check options
dist --- build a distribution (to be implemented)
-------------------------------------------------------------------------------
Supported models of functional strategies
-----------------------------------------
We have played with quite a few models, and most of them are somewhat
supported by DrIFT, but for simplicity we only exercise two models in
the present distribution; see subdirectory "models":
- drift-default: a model based on a specific universal term representation
- deriving: a model based on GHC's support for the Typeable/Data classes
Most subdirectories of ${StrategyLib}/examples assume the
"drift-default" model. In fact, we only demonstrate the difference for
the two models by having a "twosorts-drift-default" vs. a
"twosorts-deriving" example.
-------------------------------------------------------------------------------
Examples
--------
Examples are hosted in subdirectory examples.
two-sorts-drift-default --- the most trivial example; good for studying
two-sorts-derving --- a variation requiring GHC's deriving support
little-lambda --- a trivial example of language processing
joos-padl02 --- refactoring for a Java-subset (see PADL'02 paper)
joos-rule02 --- refactoring for a Java-subset (see RULE'02 paper)
haskell --- transformation of Haskell itself
-------------------------------------------------------------------------------
Links
-----
- DrIFT --- http://repetae.net/john/computer/haskell/DrIFT/
- Strafunski --- http://www.cs.vu.nl/Strafunski/
http://strafunski.sourceforge.net/