Flix



Website: flix.dev


Flix is a functional, imperative, and logic programming language developed at Aarhus University, with funding from the Independent Research Fund Denmark, and by a community of open source contributors.

The Flix language supports algebraic data types, pattern matching, parametric polymorphism, currying, higher-order functions, extensible records, channel and process-based concurrency, and tail call elimination.

Two notable features of Flix are its type and effect system and its support for first-class Datalog constraints.The Flix type and effect system supports Hindley-Milner-style type inference.

The system separates pure and impure code: if an expression is typed as pure then it cannot produce an effect at run-time.

Higher-order functions can enforce that they are given pure (or impure) function arguments.

The type and effect system supports effect polymorphism which means that the effect of a higher-order function may depend on the effect(s) of its argument(s).

Flix supports Datalog programs as first-class values.

A Datalog program value, i.e. a collection of Datalog facts and rules, can be passed to and returned from functions, stored in data structures, and composed with other Datalog program values.

The minimal model of a Datalog program value can be computed and is itself a Datalog program value.

In this way, Flix can be viewed as a meta programming language for Datalog.

Flix supports stratified negation and the Flix compiler ensures stratification at compile-time.

Flix also supports an enriched form of Datalog constraints where predicates are given lattice semantics.