Skip to content
forked from flix/flix

The Flix Programming Language

License

Notifications You must be signed in to change notification settings

sthagen/flix-flix

 
 

Repository files navigation

The Flix Programming Language

Flix is a statically typed functional, imperative, and logic programming language.

We refer you to the official Flix website (flix.dev) for more information about Flix.

Gitter

Example

///
/// The expressions of the lambda calculus are: variables, lambda abstractions, and applications.
///
enum Expression {
    // A variable expression. A variable is represented by an integer. 
    case Var(Int32),

    // A lambda abstracation expression. A variable is represented by an integer.
    case Abs(Int32, Expression),

    // A function application expression.
    case App(Expression, Expression),
}

///
/// Performs alpha conversion by introducing fresh variables for all variables in the given expression `e0`.
///
def alpha(e0: Expression, m: Map[Int32, Int32]): Expression = match e0 {
    case Var(x) =>
        // Check if we need to rename the variable.
        match Map.get(x, m) {
            case None => Var(x)
            case Some(y) => Var(y)
        }

    case Abs(x, e) =>
        // Generate a fresh variable name for `x`.
        let y = freshVar();
        Abs(y, alpha(e, Map.insert(x, y, m)))

    case App(e1, e2) =>
        // Recursively perform alpha conversion on each expression.
        App(alpha(e1, m), alpha(e2, m))
}

Building

See docs/BUILD.md.

License

Flix is available under the Apache 2.0 license.

Sponsors

We kindly thank EJ Technologies for providing us with JProfiler and JetBrains for providing us with IntelliJ IDEA.

About

The Flix Programming Language

Resources

License

Contributing

Stars

Watchers

Forks

Languages

  • Flix 54.9%
  • Scala 44.9%
  • Other 0.2%