Sparcl: A language for partially invertible computation - Matsuda, Kazutaka (Journal of Functional Programming)