We show that it is possible to reconstruct a significant portion of the type
information which is implicit in a program, automatically annotate function
interfaces, and detect definite type clashes without fundamental
changes to the philosophy of the language or imposing a type system
which unnecessarily rejects perfectly reasonable programs. To
do so, we introduce the notion of success typings of functions. Unlike
most static type systems, success typings incorporate subtyping
and never disallow a use of a function that will not result in a type
clash during runtime. Unlike most soft typing systems that have
previously been proposed, success typings allow for compositional,
bottom-up type inference which appears to scale well in practice.
A recent paper
using a subset of Erlang for the examples. This continues the trend of methods for uncovering type errors in dynamically-typed Erlang. One such tool, Dialyzer
, is now part of the Erlang distribution.