How to extend CurryBrowser:
===========================

CurryBrowser is designed as a generic analysis tool for declarative
programs. In particular, it provides some infrastructure to integrate
new program analyses implemented in Curry.
The ideas of this infrastructure are described in this paper:

M. Hanus: A Generic Analysis Environment for Declarative Programs
Proc. of the International Workshop on Curry and Functional Logic
Programming (WCFLP 2005), pp. 43-48, ACM Press, 2005
http://www.informatik.uni-kiel.de/~mh/publications/papers/WCFLP05.html


In the current implementation of CurryBrowser, the following steps
are necessary to integrate a new program analysis (here, BROWSERDIR
denotes the implementation directory of CurryBrowser):

1. Implement the new program analysis in a Curry module as a function
   of one of the types used in the module BROWSERDIR/AnalysesTypes.curry.
   For instance, a global analyses could be of type 
     myana :: [FuncDecl] -> [(QName,a)]
   Example analyses can be found in the directory BROWSERDIR/analysis.

2. Include the new analysis in the file BROWSERDIR/BrowserAnalysis.curry,
   i.e., import the module containing the new analysis and add the
   corresponding analysis function in one of the list constants
   specifying the current analyses (e.g., functionAnalyses,
   allFunctionAnalyses, moduleAnalyses).

3. Run "make" in BROWSERDIR.

If everything runs well, the new analysis is available with the next
invocation of CurryBrowser.

If your analysis is of general interest for Curry users, please sent it
to Michael Hanus <mh@informatik.uni-kiel.de> so that it can be included
in future distributions of the CurryBrowser.
