Dear list,
I am interested in learning more about static analysis of Haskell code.
Specifically of the relation between arguments of recursive and
non-recursive calls.
For example if we look at the ++ function from Prelude:
(++) [] ys = ys
(++) (x:xs) ys = x : xs ++ ys
Not specifically about Haskell, but I read some lecture notes on this topic
yesterday (by Michael Schwartzbach, PDF here:
http://lara.epfl.ch/web2010/_media/sav08:schwartzbach.pdf). The notes do a
good job of explaining how you set up lattices for various kinds of
analyses, and how calculating
If you are interested in general program analysis, I recommend you the book
Principles of Program Analysis ]
http://www.amazon.com/Principles-Program-Analysis-Flemming-Nielson/dp/3540654100].
It's very complete, and covers the most important kind of analyses that you
can do (data-flow,