1. 1. Introduction to Flix
  2. 2. Getting Started
    1. 2.1. Hello World!
    2. 2.2. Next Steps
  3. 3. Data Types
    1. 3.1. Primitives
    2. 3.2. Tuples
    3. 3.3. Enums
    4. 3.4. Type Aliases
  4. 4. Functions
  5. 5. Immutable Data
    1. 5.1. Lists
    2. 5.2. Chains and Vectors
    3. 5.3. Sets and Maps
    4. 5.4. Records
  6. 6. Mutable Data
    1. 6.1. Regions
    2. 6.2. References
    3. 6.3. Arrays
    4. 6.4. Collections
  7. 7. Control Structures
    1. 7.1. If-Then-Else
    2. 7.2. Pattern Matching
    3. 7.3. Foreach
    4. 7.4. Foreach-Yield
    5. 7.5. Monadic For-Yield
    6. 7.6. Applicative For-Yield
  8. 8. Structured Concurrency
  9. 9. Parallelism
  10. 10. Effect System
  11. 11. Modules
    1. 11.1. Declaring Modules
    2. 11.2. Using Modules
    3. 11.3. Companion Modules
  12. 12. Type Classes
    1. 12.1. Essential Classes
    2. 12.2. Automatic Derivation
    3. 12.3. Higher-Kinded Types
  13. 13. Laziness
  14. 14. Fixpoints
    1. 14.1. Stratified Negation
    2. 14.2. Local Predicates
    3. 14.3. Lattice Semantics
  15. 15. Interoperability
    1. 15.1. Creating Objects
    2. 15.2. Calling Methods
    3. 15.3. Reading and Writing Fields
    4. 15.4. Classes and Interfaces
    5. 15.5. Nested and Inner Classes
    6. 15.6. Exceptions
  16. 16. Everyday Programming
    1. 16.1. The Main Function
    2. 16.2. Printing to Standard Out
    3. 16.3. String Interpolation
    4. 16.4. Tail Recursion
    5. 16.5. Anonymous and Named Holes
    6. 16.6. Type Ascriptions
    7. 16.7. Redundancy
    8. 16.8. Debugging
  17. 17. Tools
    1. 17.1. Visual Studio Code
    2. 17.2. Package Manager
    3. 17.3. Test Framework
  18. 18. Advanced Features
    1. 18.1. Checked Casts
    2. 18.2. Unchecked Casts
    3. 18.3. Bugs and Unreachable Code
    4. 18.4. Type Match
    5. 18.5. Purity Reflection
  19. 19. Common Problems
  20. 20. Additional Information
    1. 20.1. Research Literature
    2. 20.2. Blog Posts
  21. 21. Appendix
    1. 21.1. Legal Identifiers
    2. 21.2. Operator Precedence

Programming Flix

Research Literature

The following research papers cover specific aspects of Flix:

  • The Principles of the Flix Programming Language
  • Flix: A Meta Programming Language for Datalog
  • Relational Nullable Types with Boolean Unification
  • Fixpoints for the Masses: Programming with First-Class Datalog Constraints
  • Polymorphic Types and Effects with Boolean Unification
  • Implicit Parameters for Logic Programming
  • Safe and Sound Program Analysis with Flix
  • Tail Call Elimination and Data Representation for Functional Languages on the Java Virtual Machine
  • From Datalog to Flix: A Declarative Language for Fixed Points on Lattices
  • Programming a Dataflow Analysis in Flix