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