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