Abstract Interpretation of Declarative Languages