INFER(ID:2114/inf001)


a statically-typed dialect of SCHEME.

Infer combined many (but not all) of the best features of SCHEME and ML. Compared with latently-typed languages such as SCHEME, statically-typed language such as ML and Infer, sacrifice some expressive power in exchange for the ability to catch many errors at compile-time, the possibility of more efficient execution, and some system-verified program verification. By supporting all of the forms and primitives procedures of Scheme, with a Scheme-like syntax, it is hoped Infer will prove accessible to Scheme programmers. Efficient compilation of Infer into Scheme is possible, thereby providing compatibility with Scheme programming environments.

Places
Structures:
Related languages
ML => INFER   Incorporated some features of
Scheme => INFER   Dialect of

References:
  • Haynes, Christopher T. "Infer: A Statically-typed Dialect of Scheme (Preliminary Tutorial and Documentation)" Indiana CS Technical Report TR367 (Oct 1992) view details Abstract: Infer is a statically typed language designed to be accessible to Scheme programmers. It is suitable for implementation on top of Scheme, thereby providing compatibility with Scheme programming environments. Since Infer supports many features of the ML type system, plus a number of others, Infer may also be an attractive alternative to other languages supporting ML-style polymorphism. Finally, the Infer implementation, written in Infer, is well suited as a test bed for experimentation with a wide range of modern type systems.
    The reader is assumed to be familiar with Scheme and basic type system concepts. Some familiarity with ML would be helpful.
    Infer's design owes most to ML and Scheme, but draws on other published work and includes original elements. The treatment of polymorphic assignment is due to Tofte. The typing of continuations is that of Duba, Harper, and MacQueen. The record type inference technique is due to Remy and Wand. The error reporting mechanism is inspired by Wand.
    It is hoped that the language features documented here will prove relatively stable, but Infer's design is not complete. The greatest omission at present is support for object oriented programming and/or modules. Features described in the implementation section are most likely to change.
    Section 2 provides a tutorial introduction to Infer by way of examples. Section 3 defines the syntax of Infer and informally describes its static semantics (type system) and dynamic semantics (run time behavior). Section 4 contains notes on the current implementations, with a list of know bugs.
    At present the bug list includes failure to implement some of the features described in this document. Reports of further bugs, as well as design suggestions, are welcome.