Affiliation:
1. KIT, Germany
2. Microsoft Research, USA
Abstract
Purely functional programming languages pride themselves with reifying effects that are implicit in imperative languages into reusable and composable abstractions such as monads. This reification allows for more exact control over effects as well as the introduction of new or derived effects. However, despite libraries of more and more powerful abstractions over effectful operations being developed, syntactically the common 'do' notation still lags behind equivalent imperative code it is supposed to mimic regarding verbosity and code duplication. In this paper, we explore extending 'do' notation with other imperative language features that can be added to simplify monadic code: local mutation, early return, and iteration. We present formal translation rules that compile these features back down to purely functional code, show that the generated code can still be reasoned over using an implementation of the translation in the Lean 4 theorem prover, and formally prove the correctness of the translation rules relative to a simple static and dynamic semantics in Lean.
Publisher
Association for Computing Machinery (ACM)
Subject
Safety, Risk, Reliability and Quality,Software
Reference29 articles.
1. A Brief Overview of Agda – A Functional Language with Dependent Types
2. Idris, a general-purpose dependently typed programming language: Design and implementation
3. Resource-Dependent Algebraic Effects
4. Niklas Bülow. 2022. Proof Visualization for the Lean 4 Theorem Prover. https://pp.ipd.kit.edu/publication.php?id=b Niklas Bülow. 2022. Proof Visualization for the Lean 4 Theorem Prover. https://pp.ipd.kit.edu/publication.php?id=b
5. The calculus of constructions