published in Proceedings of the ACM SIGPLAN International Conference on Functional Programming ICFP Journal