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.