FL: A Functional Programming Language from the 1980s
Introduction
FL, short for Function Level, is a functional programming language that was created at the IBM Almaden Research Center in the 1980s. It was designed by John Backus, John Williams, and Edward Wimmers as a successor to Backus’ earlier work on the FP language, which laid the groundwork for what was later termed function-level programming. FL represents an important step in the evolution of programming languages, with its focus on a strict, dynamically typed functional paradigm and innovations that would influence later languages, most notably J—a language developed by Kenneth E. Iverson.
This article provides an in-depth examination of FL, exploring its origins, design, and features, as well as its contributions to the field of functional programming.

The Context of FL’s Creation
FL emerged from the need to evolve the FP language, which was one of the pioneering functional programming languages of the 1960s and 1970s. Backus’ work on FP was an effort to address challenges in programming methodology and compiler construction. As a functional language, FP focused on defining computations in terms of functions and their compositions, abstracting away from the imperative programming paradigms that dominated at the time.
Despite the theoretical significance of FP, its practical adoption was limited. Many of the concepts Backus explored in FP remained unrefined for real-world application. In response to this, the IBM Almaden Research Center sought to develop a new language—FL—that addressed some of FP’s shortcomings and added more powerful abstractions.
Function-Level Programming
The most distinctive feature of FL was its approach to function-level programming. Unlike traditional programming languages, which treat functions as discrete, isolated blocks of code, FL views functions as first-class entities within a larger system. This shift in perspective allows functions to be treated as arguments and return values, facilitating higher-order functions that can be composed and manipulated in sophisticated ways.
The function-level programming concept was the focal point of FL’s design. It extended the idea of functions by introducing a system where entire functions could be manipulated directly, passed around as data, and linked dynamically. By incorporating a function-level model, FL allowed for the expressiveness and abstraction that is characteristic of modern functional programming languages.
Key Features of FL
-
Dynamically Typed:
FL is dynamically typed, meaning that the types of variables and functions are not determined at compile time. This allows for more flexibility in the language, though it also places greater emphasis on runtime checks and can make debugging more challenging. -
Strict Evaluation:
FL adheres to a strict evaluation strategy, meaning that expressions are evaluated as soon as they are bound to variables or passed as arguments to functions. This approach contrasts with lazy evaluation, which defers computation until a value is actually needed. While strict evaluation can lead to more predictable performance, it may also result in inefficiencies if not managed properly. -
Exception Handling:
The language introduced exception handling mechanisms that were similar to those later seen in ML (Meta Language). FL provides constructs for throw and catch, which allow the programmer to define exception handling logic within functions. This feature supports robust error recovery strategies and is particularly valuable in functional programming, where side effects are typically minimized. -
Implicit History Argument:
One of the key innovations of FL was the introduction of an implicit history argument. This argument allowed functions to interact with input/output (I/O) in a purely functional manner. In addition to handling I/O operations, the history argument served as a means to integrate FL with other systems, including C code. This made FL more practical for real-world applications, as it could seamlessly interface with existing software libraries and frameworks. -
Hindley–Milner Type System:
The language also implemented a type system based on the Hindley–Milner type inference algorithm, which had already been proven in languages like ML. This type system provides a robust and flexible way to handle types and ensures that the language can reason about type correctness without requiring the programmer to explicitly annotate types. -
Optimization through Type System:
FL’s type system was designed not only for type checking but also as a mechanism for optimization. By analyzing the types used in functions, the language could infer and apply optimizations at compile-time, potentially leading to more efficient execution.
The Influence of FL on Future Languages
FL’s influence on later programming languages is profound, particularly in the development of J, a language created by Kenneth E. Iverson. Iverson, who had worked closely with Backus on the development of APL (A Programming Language), was directly influenced by the function-level abstractions introduced in FL. As a result, many of FL’s innovations, such as the use of function-level programming and the history argument, were incorporated into J.
In addition to J, many of the core principles of FL—such as strict functional programming, exception handling, and type inference—would go on to influence future functional programming languages, including Haskell and Scala. These languages, while distinct in their approaches, reflect many of the same concerns that FL addressed in its design.
FL and Its Role in the Evolution of Programming Languages
FL was a significant stepping stone in the evolution of functional programming languages. Though it was not widely adopted in industry, its theoretical contributions have had a lasting impact on how functional programming is understood and practiced today. FL introduced new ways of thinking about functions, evaluation strategies, and type systems—ideas that continue to shape modern programming paradigms.
Moreover, FL’s emphasis on dynamic typing and exception handling foreshadowed many of the features that would become commonplace in subsequent programming languages. By providing abstractions for higher-order functions and I/O operations, FL helped to move functional programming from the theoretical domain into more practical applications, laying the groundwork for many of the modern functional languages we use today.
The Decline and Legacy of FL
While FL’s technical merits are clear, its adoption was limited. The 1980s and 1990s saw the rise of other programming paradigms, especially object-oriented programming, which became the dominant paradigm in software development. Languages like C++ and Java eclipsed functional languages in popularity, as the software industry increasingly focused on building large, object-oriented systems.
Nonetheless, FL remains an important milestone in the history of programming languages. Its design principles continue to influence functional programming, and many of its ideas have been incorporated into more widely used languages. The language’s conceptual contributions to the fields of type systems, functional programming, and exception handling laid the foundation for much of the functionality we take for granted in modern programming languages.
Conclusion
FL (Function Level) is a powerful but often overlooked programming language that made significant contributions to the field of functional programming. Its dynamic typing, strict evaluation, function-level programming model, and type inference system introduced new ideas that continue to influence modern programming languages.
Although FL was not widely adopted, its legacy lives on in languages like J, Haskell, and Scala, as well as in the broader evolution of functional programming concepts. Today, FL remains a key part of the history of programming languages and an important chapter in the ongoing development of more efficient, flexible, and expressive software tools.
For those interested in learning more about FL, the Wikipedia article on FL offers further insights into its history and features, providing a valuable resource for anyone curious about this often-overlooked language.