Fungi: Typed incremental computation with names

by   Matthew A. Hammer, et al.

Incremental computations attempt to exploit input similarities over time, reusing work that is unaffected by input changes. To maximize this reuse in a general-purpose programming setting, programmers need a mechanism to identify dynamic allocations (of data and subcomputations) that correspond over time. We present Fungi, a typed functional language for incremental computation with names. Unlike prior general-purpose languages for incremental computing, Fungi's notion of names is formal, general, and statically verifiable. Fungi's type-and-effect system permits the programmer to encode (program-specific) local invariants about names, and to use these invariants to establish global uniqueness for their composed programs, the property of using names correctly. We prove that well-typed Fungi programs respect global uniqueness. We derive a bidirectional version of the type and effect system, and we have implemented a prototype of Fungi in Rust. We apply Fungi to a library of incremental collections, showing that it is expressive in practice.


An Incremental Slicing Method for Functional Programs

Several applications of slicing require a program to be sliced with resp...

Using Standard Typing Algorithms Incrementally

Modern languages are equipped with static type checking/inference that h...

Generating Appealing Brand Names

Providing appealing brand names to newly launched products, newly formed...

A program logic for fresh name generation

We present a program logic for Pitts and Stark's ν-calculus, an extensio...

Exploiting Lists of Names for Named Entity Identification of Financial Institutions from Unstructured Documents

There is a wealth of information about financial systems that is embedde...

Effects Without Monads: Non-determinism – Back to the Meta Language

We reflect on programming with complicated effects, recalling an undeser...

Type-Level Computations for Ruby Libraries

Many researchers have explored ways to bring static typing to dynamic la...