The GRIN Project: A Highly Optimising Back End for Lazy Functional Languages