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