published in Proceedings of the ninth ACM SIGPLAN international conference on Functional programming Journal