Skip to content

Expressions

Prelude-style construction expressions for LanguageExt types. All methods return ExpressionRef for composability.

See also: Overview | Types | Eff Lifting


OptionExpression

Builds Option<T> construction expressions. Requires using static LanguageExt.Prelude in generated code.

Method Returns Produces
Optional(expr) ExpressionRef Optional(expr)
Some(expr) ExpressionRef Some(expr)
None ExpressionRef None
using Deepstaging.Roslyn.LanguageExt.Expressions;

OptionExpression.Optional("entity");  // → Optional(entity)
OptionExpression.Some("value");       // → Some(value)
OptionExpression.None;                // → None

Optional vs Some

Optional(x) safely wraps a nullable — returns None if x is null. Some(x) asserts non-null and throws if given null. Use Optional for database lookups and Some when you know the value exists.


EitherExpression

Builds Either<L, R> construction expressions.

Method Returns Produces
Right(expr) ExpressionRef Right(expr)
Left(expr) ExpressionRef Left(expr)
EitherExpression.Right("entity");       // → Right(entity)
EitherExpression.Left("Error.New(ex)"); // → Left(Error.New(ex))

FinExpression

Builds Fin<A> construction expressions.

Method Returns Produces
FinSucc(expr) ExpressionRef FinSucc(expr)
FinFail(expr) ExpressionRef FinFail(expr)
FinFailMessage(message) ExpressionRef FinFail(Error.New(message))
FinExpression.FinSucc("42");              // → FinSucc(42)
FinExpression.FinFail("Error.New(ex)");   // → FinFail(Error.New(ex))
FinExpression.FinFailMessage("\"oops\""); // → FinFail(Error.New("oops"))

SeqExpression

Builds Seq<A> construction and conversion expressions.

Method Returns Produces
Seq(items...) ExpressionRef Seq(a, b, c)
toSeq(expr) ExpressionRef toSeq(expr)
Empty(seqType) ExpressionRef global::LanguageExt.Seq<A>.Empty
SeqExpression.Seq("a", "b", "c");  // → Seq(a, b, c)
SeqExpression.toSeq("items");      // → toSeq(items)

var seqType = LanguageExtTypes.Seq("string");
SeqExpression.Empty(seqType);      // → global::LanguageExt.Seq<string>.Empty

Seq vs toSeq

Seq(...) constructs from explicit items. toSeq(expr) converts an IEnumerable<T> — use it when bridging from LINQ results or collections.


HashMapExpression

Builds HashMap<K, V> construction and conversion expressions.

Method Returns Produces
HashMap(pairs...) ExpressionRef HashMap(pair1, pair2)
toHashMap(expr) ExpressionRef toHashMap(expr)
Empty(hashMapType) ExpressionRef global::LanguageExt.HashMap<K, V>.Empty
HashMapExpression.HashMap("(\"key\", 1)", "(\"other\", 2)");
// → HashMap(("key", 1), ("other", 2))

HashMapExpression.toHashMap("pairs");
// → toHashMap(pairs)

var mapType = LanguageExtTypes.HashMap("string", "int");
HashMapExpression.Empty(mapType);
// → global::LanguageExt.HashMap<string, int>.Empty

Composability

All expressions return ExpressionRef, which supports chaining via the standard emit API:

// Chain with .Call()
OptionExpression.Optional("value").Call("Map", "x => x.Name");
// → Optional(value).Map(x => x.Name)

// Chain with .Await()
EitherExpression.Right("entity").Await();
// → await Right(entity)

// Chain with .Member()
FinExpression.FinSucc("result").Member("IsSucc");
// → FinSucc(result).IsSucc

// Use in body statements
body.AddReturn(OptionExpression.Optional("entity"));
// → return Optional(entity);

All expression methods accept ExpressionRef parameters, which have implicit conversion from string — so you can pass string literals directly.