A C# functional programming framework that provides monads, immutable collections, effects, and concurrency tools to write declarative, robust code.
LanguageExt is a pure functional programming framework for C# that provides a comprehensive set of functional abstractions like monads, immutable collections, effects, and concurrency primitives. It solves the problem of writing robust, maintainable C# code by enabling declarative and purely functional patterns that reduce complexity and side effects.
C# developers and teams building large, long-lived applications who want to adopt functional programming techniques without switching languages, and those seeking more expressive, safe, and testable code.
Developers choose LanguageExt because it brings Haskell/ML-style functional programming directly into C#, offering a rich, production-ready base class library for functional programming that integrates seamlessly with existing .NET ecosystems and tooling.
C# pure functional programming framework - come and get declarative!
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Offers a wide range of constructs like monads (Option, Either), effects (IO/Eff), and immutable collections, making it a one-stop shop for FP in C# without switching languages.
Includes collections like Seq described as 'very, very fast' and thread-safe, ideal for concurrent applications with equality and ordering constraints.
Provides pure functional effects (Eff<RT, A>) with dependency injection for runtime, enabling easy unit testing of IO operations as highlighted in the features table.
Features lock-free atomic references (Atom, Ref) and transactional memory for managing shared state without locks, detailed in the atomic concurrency section.
Deliberately uses camelCase for static functions, contradicting C# naming guidelines and acknowledged as 'non-idiomatic' in the README, which can alienate traditional developers.
Requires understanding of concepts like monads, higher-kinded traits, and ML-style patterns, targeting a 'new community' within C# and limiting accessibility.
Some features like value traits are noted as 'still a little in-flux' and may change, adding uncertainty for production use, as mentioned in the documentation.
Requires multiple global using statements and careful namespace management (e.g., Prelude, Traits), which can be cumbersome for integration with existing codebases.