Partial type constructors: or, making ad hoc datatypes less ad hoc
Partial type constructors: or, making ad hoc datatypes less ad hoc
复制标题
部分类型构造函数:或者,使临时数据类型不那么临时
DOI:
10.1145/3371108
复制
发表时间:
2020
影响因子:
--
通讯作者:
Eisenberg, Richard A.
中科院分区:
文献类型:
--
作者:
Jones, Mark P.;Morris, J. Garrett;Eisenberg, Richard A.
Functional programming languages assume that type constructors are total. Yet functional programmers know better: counterexamples range from container types that make limiting assumptions about their contents (e.g., requiring computable equality or ordering functions) to type families with defining equations only over certain choices of arguments. We present a language design and formal theory of partial type constructors, capturing the domains of type constructors using qualified types. Our design is both simple and expressive: we support partial datatypes as first-class citizens (including as instances of parametric abstractions, such as the Haskell Functor and Monad classes), and show a simple type elaboration algorithm that avoids placing undue annotation burden on programmers. We show that our type system rejects ill-defined types and can be compiled to a semantic model based on System F. Finally, we have conducted an experimental analysis of a body of Haskell code, using a proof-of-concept implementation of our system; while there are cases where our system requires additional annotations, these cases are rarely encountered in practical Haskell code.