ABSTRACT

The static single assignment form which is used by compilers of imperative programming languages is, as noted by Kelsey, a functional language. Local mutability is removed by renaming variables, and control flow is split into basic blocks, which are, in turn, a set of mutually recursive lambda abstractions. This suggests that such constructs could be used as the foundation for a functional language. In this paper, we present the core of a purely functional programming language with an imperative look-and-feel and with a type and effect system based on that of Leijen's Koka. We also discuss our initial results with a prototype implementation and a type and effect inference algorithm.