Abstract interpretation and optimising transformations for applicative programs