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
https://www.michaelhanus.de/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 `cpm install` 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.
