I'm not sure if you got my previous message, as I was having some
problems posting to the list...
Putting in a nutshell, I generalize an extensional defined function
definition into a recursive one. This is done in a number of steps by
modifying expressions and exploiting type information of
sub-expressions. For example:
rev [] = []
rev [a] = [a]
rev [a,b] = [b,a]
rev [a,b,c] = [c,b,a]
~~>
rev x = y
~~>
rev [] = []
rev (x:xs) = (y:ys)
~~>
rev [] = []
rev (x:xs) = (last (x:xs)) : (reverse (x:xs))
The initial set of rules is given by the user (in a file, via IO, ...).
The problem later is to infer the type of an intermediate variable, e.g.
'y'.
I'm still not entirely sure what you want to do here. But it sounds like HaRe
could already do most of this for you via a sequence of folds, unfolds,
introduce pattern matching and generative folding. HaRe already has
built-in support for some symbolic evaluation, which is already used in the generative
fold refactoring, and has type checking support too.
http://www.cs.kent.ac.uk/projects/refactor-fp/hare.html
If it doesn't do exactly what you want out of the tin, it does have a large API
for designing transformations over Haskell code.
http://www.cs.kent.ac.uk/projects/refactor-fp/hare/haddock/RefacUtils.html
Chris.
Thanks,
Martin
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
--
Chris Brown
Visualization Software Engineer, Peiriannydd Meddalwedd Delweddu.
Cast Ltd., Technium CAST,
Ffordd Penlan, Parc Menai,
Bangor, Gwynedd UK. LL57 4HJ.
Tel: +44 (0)1248 675038
Fax: +44 (0)1248 675012
Mobile: +44 (0)7917 763712
--
Centre for Advanced Software Technology Limited is a limited company registered
in England and Wales.
Registered Number: 04473521, Registered Office: Finance Office, Bangor
University, College Road, Bangor, Gwynedd. LL57 2DG.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe