LanguageExt.Sys
5.0.0-beta-18
See the version list below for details.
dotnet add package LanguageExt.Sys --version 5.0.0-beta-18
NuGet\Install-Package LanguageExt.Sys -Version 5.0.0-beta-18
<PackageReference Include="LanguageExt.Sys" Version="5.0.0-beta-18" />
paket add LanguageExt.Sys --version 5.0.0-beta-18
#r "nuget: LanguageExt.Sys, 5.0.0-beta-18"
// Install LanguageExt.Sys as a Cake Addin #addin nuget:?package=LanguageExt.Sys&version=5.0.0-beta-18&prerelease // Install LanguageExt.Sys as a Cake Tool #tool nuget:?package=LanguageExt.Sys&version=5.0.0-beta-18&prerelease
LanguageExt.Sys
LanguageExt.Sys
is the a wrapper around the System
namespace IO functions and is part of the language-ext functional programming framework.
The framework uses and abuses the features of C# to provide a pure functional-programming 'Base Class Library' that, if you squint, can look like extensions to the language itself. The desire here is to make programming in C# much more robust by helping the engineer's inertia flow in the direction of declarative and pure functional code rather than imperative.
Using these techniques for large code-bases can bring tangible benefits to long-term maintenance by removing hidden complexity and by easing the engineer's cognitive load.
Features
Functional effects and IO
Atomic concurrency and collections
Location | Feature | Description |
---|---|---|
Core |
Atom<A> |
A lock-free atomically mutable reference for working with shared state |
Core |
Ref<A> |
An atomic reference to be used in the transactional memory system |
Core |
AtomHashMap<K, V> |
An immutable HashMap with a lock-free atomically mutable reference |
Core |
AtomSeq<A> |
An immutable Seq with a lock-free atomically mutable reference |
Core |
VectorClock<A> |
Understand distributed causality |
Core |
VersionVector<A> |
A vector clock with some versioned data |
Core |
VersionHashMap <ConflictV, K, V> |
Distrubuted atomic versioning of keys in a hash-map |
Immutable collections
Location | Feature | Description |
---|---|---|
Core |
Arr<A> |
Immutable array |
Core |
Seq<A> |
Lazy immutable list, evaluate at-most-once - very, very fast! |
Core |
Iterable<A> |
Wrapper around IEnumerable with support for traits - enables the higher-kinded traits to work with enumerables. |
Core |
Lst<A> |
Immutable list - use Seq over Lst unless you need InsertAt |
Core |
Map<K, V> |
Immutable map |
Core |
Map<OrdK, K, V> |
Immutable map with Ord constraint on K |
Core |
HashMap<K, V> |
Immutable hash-map |
Core |
HashMap<EqK, K, V> |
Immutable hash-map with Eq constraint on K |
Core |
Set<A> |
Immutable set |
Core |
Set<OrdA, A> |
Immutable set with Ord constraint on A |
Core |
HashSet<A> |
Immutable hash-set |
Core |
HashSet<EqA, A> |
Immutable hash-set with Eq constraint on A |
Core |
Que<A> |
Immutable queue |
Core |
Stck<A> |
Immutable stack |
Optional and alternative value monads
Location | Feature | Description |
---|---|---|
Core |
Option<A> |
Option monad |
Core |
OptionT<M, A> |
Option monad-transformer |
Core |
Either<L,R> |
Right/Left choice monad |
Core |
EitherT<L, M, R> |
Right/Left choice monad-transformer |
Core |
Fin<A> |
Error handling monad, like Either<Error, A> |
Core |
FinT<M, A> |
Error handling monad-transformer |
Core |
Try<A> |
Exception handling monad |
Core |
TryT<M, A> |
Exception handling monad-transformer |
Core |
Validation<FAIL ,SUCCESS> |
Validation applicative and monad for collecting multiple errors before aborting an operation |
Core |
ValidationT<FAIL, M, SUCCESS> |
Validation applicative and monad-transformer |
State managing monads
Location | Feature | Description |
---|---|---|
Core |
Reader<E, A> |
Reader monad |
Core |
ReaderT<E, M, A> |
Reader monad-transformer |
Core |
Writer<W, A> |
Writer monad that logs to a W constrained to be a Monoid |
Core |
WriterT<W, M, A> |
Writer monad-transformer |
Core |
State<S, A> |
State monad |
Core |
StateT<S, M, A> |
State monad-transformer |
Parser combinators
Location | Feature | Description |
---|---|---|
Parsec |
Parser<A> |
String parser monad and full parser combinators library |
Parsec |
Parser<I, O> |
Parser monad that can work with any input stream type |
Pretty
Location | Feature | Description |
---|---|---|
Core |
Doc<A> |
Produce nicely formatted text with smart layouts |
Differencing
Location | Feature | Description |
---|---|---|
Core |
Patch<EqA, A> |
Uses patch-theory to efficiently calculate the difference (Patch.diff(list1, list2) ) between two collections of A and build a patch which can be applied (Patch.apply(patch, list) ) to one to make the other (think git diff). |
Traits
The traits are major feature of v5
+ language-ext that makes generic programming with higher-kinds a reality. Check out Paul's series on Higher Kinds to get a deeper insight.
Value traits
These work a little like NewType
but they impart semantic meaning and some common operators for the underlying value.
Location | Feature | Description |
---|---|---|
Core |
DomainType<SELF, REPR> |
Provides a mapping from SELF to an underlying representation: REPR |
Core |
Identifier <SELF> |
Identifiers (like IDs in databases: PersonId for example), they are equivalent to DomaintType with equality. |
Core |
VectorSpace<SELF, SCALAR> |
Scalable values; can add and subtract self, but can only multiply and divide by a scalar. Can also negate. |
Core |
Amount <SELF, SCALAR> |
Quantities, such as the amount of money in USD on a bank account or a file size in bytes. Derives VectorSpace , IdentifierLike , DomainType , and is orderable (comparable). |
Core |
LocusLike <SELF, SCALAR, DISTANCE> |
Works with space-like structures. Spaces have absolute and relative distances. Has an origin/zero point and derives DomainType , IdentifierLike , AmountLike and VectorSpace . DISTANCE must also be an AmountLike<SELF, REPR, SCALAR> . |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- LanguageExt.Core (>= 5.0.0-beta-18)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on LanguageExt.Sys:
Package | Downloads |
---|---|
Echo.Process
echo-process Actor library component that works with LanguageExt.Core: An 'Erlang like' process system (actors) that can optionally persist messages and state to Redis (note you can use it without Redis for in-app messaging). The process system additionally supports Rx streams of messages and state allowing for a complete system of reactive events and message dispatch. |
|
DataQuery.LanguageExt
Dapper + Npgsql database utilities using Language.Ext |
|
LanguageExt.SysX
Extensions to language-ext effects system that wraps .NET5+ specific IO from the .NET BCL |
|
VSlices.Base
Base package |
|
VSlices.CrossCutting.BackgroundTaskListener
Extension package for background task listener implementations in CrossCutting projects |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on LanguageExt.Sys:
Repository | Stars |
---|---|
dbosoft/YaNco
.NET SAP RFC API based on SAP Netweaver RFC SDK
|
|
louthy/echo-process
Actor library for C# with additional modules that support persistence to Redis, as well as JS integration
|
Version | Downloads | Last updated |
---|---|---|
5.0.0-beta-38 | 75 | 11/18/2024 |
5.0.0-beta-36 | 61 | 11/6/2024 |
5.0.0-beta-35 | 60 | 11/6/2024 |
5.0.0-beta-34 | 73 | 10/28/2024 |
5.0.0-beta-33 | 69 | 10/27/2024 |
5.0.0-beta-32 | 74 | 10/27/2024 |
5.0.0-beta-31 | 63 | 10/25/2024 |
5.0.0-beta-30 | 62 | 10/25/2024 |
5.0.0-beta-29 | 67 | 10/22/2024 |
5.0.0-beta-28 | 78 | 10/17/2024 |
5.0.0-beta-27 | 74 | 10/16/2024 |
5.0.0-beta-26 | 86 | 10/13/2024 |
5.0.0-beta-25 | 74 | 10/13/2024 |
5.0.0-beta-24 | 71 | 10/11/2024 |
5.0.0-beta-23 | 70 | 10/10/2024 |
5.0.0-beta-22 | 123 | 9/20/2024 |
5.0.0-beta-21 | 74 | 9/20/2024 |
5.0.0-beta-20 | 90 | 9/18/2024 |
5.0.0-beta-19 | 81 | 9/18/2024 |
5.0.0-beta-18 | 90 | 9/16/2024 |
5.0.0-beta-17 | 90 | 9/16/2024 |
5.0.0-beta-16 | 78 | 9/16/2024 |
5.0.0-beta-15 | 87 | 9/16/2024 |
5.0.0-beta-14 | 113 | 9/5/2024 |
5.0.0-beta-13 | 79 | 9/5/2024 |
5.0.0-beta-12 | 94 | 9/4/2024 |
5.0.0-beta-11 | 92 | 9/2/2024 |
5.0.0-beta-10 | 120 | 8/18/2024 |
5.0.0-beta-09 | 107 | 8/18/2024 |
5.0.0-beta-08 | 122 | 8/16/2024 |
5.0.0-beta-07 | 101 | 8/7/2024 |
5.0.0-beta-06 | 60 | 8/4/2024 |
5.0.0-beta-05 | 51 | 8/3/2024 |
5.0.0-beta-04 | 65 | 7/30/2024 |
5.0.0-beta-03 | 96 | 7/29/2024 |
5.0.0-beta-02 | 77 | 7/28/2024 |
5.0.0-beta-01 | 175 | 6/26/2024 |
5.0.0-alpha.11 | 71 | 5/24/2024 |
5.0.0-alpha.10 | 62 | 5/16/2024 |
5.0.0-alpha.7 | 57 | 5/12/2024 |
5.0.0-alpha.6 | 87 | 4/16/2024 |
5.0.0-alpha.5 | 78 | 3/24/2024 |
5.0.0-alpha.3 | 63 | 3/23/2024 |
5.0.0-alpha.2 | 56 | 3/19/2024 |
5.0.0-alpha.1 | 73 | 3/4/2024 |
4.4.9 | 4,735 | 6/26/2024 |
4.4.8 | 22,482 | 2/7/2024 |
4.4.7 | 10,146 | 10/21/2023 |
4.4.6 | 1,071 | 10/1/2023 |
4.4.5 | 1,541 | 9/21/2023 |
4.4.4 | 1,067 | 9/7/2023 |
4.4.3 | 9,874 | 4/14/2023 |
4.4.2 | 3,577 | 2/5/2023 |
4.4.1 | 753 | 2/4/2023 |
4.4.0 | 3,454 | 11/16/2022 |
4.3.2-beta | 2,098 | 6/29/2022 |
4.3.1-beta | 561 | 6/28/2022 |
4.3.0-beta | 536 | 6/28/2022 |
4.2.9 | 19,833 | 6/27/2022 |
4.2.8 | 1,017 | 6/27/2022 |
4.2.7 | 1,008 | 6/16/2022 |
4.2.6 | 1,004 | 6/16/2022 |
4.2.5 | 1,006 | 6/15/2022 |
4.2.2 | 1,245 | 6/7/2022 |
4.2.1 | 978 | 6/4/2022 |
4.2.0 | 990 | 6/4/2022 |
4.1.1 | 2,525 | 5/20/2022 |
4.1.0 | 6,250 | 5/10/2022 |
4.0.10-beta | 569 | 5/4/2022 |
4.0.9-beta | 163 | 5/2/2022 |
4.0.8-beta | 173 | 3/15/2022 |
4.0.7-beta | 167 | 3/9/2022 |
4.0.6-beta | 164 | 3/9/2022 |
4.0.5-beta | 167 | 3/9/2022 |
4.0.4 | 787 | 3/7/2022 |
4.0.3 | 16,625 | 10/21/2021 |
4.0.2 | 387 | 10/20/2021 |
4.0.1 | 383 | 10/20/2021 |
4.0.0 | 530 | 10/17/2021 |
3.5.69-beta | 376 | 10/17/2021 |
3.5.68-beta | 329 | 10/16/2021 |
3.5.67-beta | 337 | 10/16/2021 |
3.5.66-beta | 238 | 10/16/2021 |
3.5.65-beta | 216 | 10/14/2021 |
3.5.64-beta | 268 | 10/9/2021 |
3.5.63-beta | 283 | 10/9/2021 |
3.5.62-beta | 245 | 9/29/2021 |
3.5.61-beta | 253 | 9/28/2021 |
3.5.60-beta | 235 | 9/28/2021 |
3.5.59-beta | 242 | 9/21/2021 |
3.5.58-beta | 223 | 9/20/2021 |
3.5.57-beta | 271 | 9/19/2021 |
3.5.56-beta | 310 | 9/19/2021 |
3.5.55-beta | 227 | 9/19/2021 |
3.5.54-beta | 291 | 9/11/2021 |
3.5.53-beta | 381 | 8/15/2021 |
3.5.52-beta | 227 | 8/15/2021 |
3.5.51-beta | 256 | 8/12/2021 |
3.5.50-beta | 307 | 7/28/2021 |
3.5.49-beta | 273 | 7/28/2021 |
3.5.48-beta | 223 | 7/27/2021 |
3.5.46-beta | 260 | 7/22/2021 |
3.5.45-beta | 230 | 7/21/2021 |
3.5.44-beta | 237 | 7/19/2021 |
3.5.43-beta | 287 | 7/18/2021 |
3.5.42-beta | 277 | 7/18/2021 |
3.5.41-beta | 243 | 7/18/2021 |
3.5.40-beta | 267 | 7/18/2021 |
3.5.39-beta | 281 | 7/18/2021 |
3.5.38-beta | 260 | 7/16/2021 |
3.5.37-beta | 261 | 7/7/2021 |
3.5.36-beta | 266 | 7/7/2021 |
3.5.35-beta | 255 | 7/6/2021 |
3.5.34-beta | 277 | 7/6/2021 |
3.5.33-beta | 270 | 7/5/2021 |
3.5.32-beta | 276 | 7/5/2021 |
3.5.31-beta | 242 | 7/5/2021 |
3.5.30-beta | 226 | 7/5/2021 |
3.5.28-beta | 239 | 6/24/2021 |