🤖 AI Summary
This work addresses the verbosity and usability challenges of Linear Haskell, where explicit linear annotations—though essential for ensuring resource safety—lead to cumbersome code. To reconcile safety with programmer convenience, the authors propose an implicit linearity mechanism that delegates the inference and insertion of linear type parameters to the compiler. Built upon a Qualified Type System, their approach extends GHC’s constraint solver, introduces desugaring support for Linear Haskell, and refines both the constraint-solving algorithm and the underlying formal system. Experimental evaluation demonstrates that this paradigm substantially simplifies linear-type programming while preserving correctness, and it proves effective across a range of practical use cases, thereby affirming its utility and robustness.
📝 Abstract
Linear constraints are the linear counterpart of Haskell's class constraints. Linearly typed parameters allow the programmer to control resources such as file handles and manually managed memory as linear arguments. Indeed, a linear type system can verify that these resources are used safely. However, writing code with explicit linear arguments requires bureaucracy. Linear constraints address this shortcoming: a linear constraint acts as an implicit linear argument that can be filled in automatically by the compiler.
We present this new feature as a qualified type system, together with an inference algorithm which extends GHC's existing constraint solver algorithm. Soundness of linear constraints is ensured by the fact that they desugar into Linear Haskell.
This paper is a revised and extended version of a previous paper by the same authors (arXiv:2103.06127). The formal system and the constraint solver have been significantly simplified and numerous additional applications are described.