Skip to content

FP Mojo 1.0.0

Choose a tag to compare

@anatolvitold anatolvitold released this 02 Oct 15:24
· 12 commits to main since this release

The first release of FP Mojo: functional programming for Mojo 1.1.

  • Pipelines and composition: pipe, piped, flow, compose, flip and partial, with every intermediate type inferred and errors kept with their own types.
  • Lazy iteration and folds over native iterators and owned collections: map, filter, filter_map, flat_map, scan_left, fold_left, fold_until, reduce, find, any, all.
  • Results: Result with map, flat_map, map_err, or_else and folds, plus attempt, raise_on_err and collect_results between raised and stored errors.
  • Algebraic data types and pattern matching: declare a type from ordinary structs and match it with fp.match, checked for exhaustiveness when the program compiles. Recursive values are evaluated in a loop, with no recursion depth limit. Choice stores a non-recursive value in place, and Result, ControlFlow and Optional are matched the same way.
  • Loops as expressions: while_loop, fori_loop and carry/output scan.
  • Functor, Applicative, Monad, Traversable and Monoid, with Identity, Optional, Result and List instances, and Reader, State, Writer, OptionalT and ResultT transformers.

Works with Mojo 1.1.x on Linux x86-64 and macOS arm64.

Install from the Modular community channel (available once modular/modular-community#387 is merged):

# pixi.toml
[workspace]
channels = ["https://conda.modular.com/max", "https://repo.prefix.dev/modular-community", "conda-forge"]
pixi add fp_mojo

Documentation: https://spellbound-mojo.github.io/fp_mojo/