LanguageExt.Core

LanguageExt.Core Traits Monads Monad

Contents

class MonadExtensions Source #

Monad module

Methods

method K<M, B> Bind <M, A, B> ( this K<M, A> ma, Func<A, K<M, B>> f) Source #

where M : Monad<M>

Monad bind operation

Parameters

type A

Initial bound value type

type B

Intermediate bound value type

param f

Monadic bind function

returns

M

method K<M, B> Bind <M, A, B> ( this K<M, A> ma, Func<A, Pure<B>> f) Source #

where M : Functor<M>

Monad bind operation

Parameters

type A

Initial bound value type

type B

Intermediate bound value type

param f

Monadic bind function

returns

M

method K<M, B> Bind <M, A, B> ( this K<M, A> ma, Func<A, K<IO, B>> f) Source #

where M : Monad<M>

Monad bind operation

Parameters

type A

Initial bound value type

type B

Intermediate bound value type

param f

Monadic bind function

returns

M

method K<M, C> SelectMany <M, A, B, C> ( this K<M, A> ma, Func<A, K<M, B>> bind, Func<A, B, C> project) Source #

where M : Monad<M>

Monad bind operation

Parameters

type A

Initial bound value type

type B

Intermediate bound value type

type C

Target bound value type

param bind

Monadic bind function

param project

Projection function

returns

M

method K<M, C> SelectMany <M, A, B, C> ( this K<M, A> ma, Func<A, Pure<B>> bind, Func<A, B, C> project) Source #

where M : Functor<M>

Monad bind operation

Parameters

type A

Initial bound value type

type B

Intermediate bound value type

type C

Target bound value type

param bind

Monadic bind function

param project

Projection function

returns

M

method K<M, C> SelectMany <M, A, B, C> ( this K<M, A> ma, Func<A, K<IO, B>> bind, Func<A, B, C> project) Source #

where M : Monad<M>

Monad bind operation

Parameters

type A

Initial bound value type

type B

Intermediate bound value type

type C

Target bound value type

param bind

Monadic bind function

param project

Projection function

returns

M

method K<M, A> Flatten <M, A> (this K<M, K<M, A>> mma) Source #

where M : Monad<M>

Monadic join operation

Parameters

type M

Monad trait

type A

Bound value type

param mma
returns

Joined monad

class MonadExtensions Source #

Monad module

Methods

method K<M, K<N, B>> BindT <M, N, A, B> (this K<M, K<N, A>> mna, Func<A, K<N, B>> f) Source #

where M : Functor<M>
where N : Monad<N>

Runs a monadic bind operation on the nested monads

If you're working with an inner monad that is concrete then you will first need to call KindT to cast the monad to a more general K version. This enables the T variant extensions (like BindT, `MapT, etc.) to work without providing excessive generic arguments all the way down the chain.

Parameters

type M

Outer monad trait

type N

Inner monad trait

type A

Input bound value

type B

Output bound value

param mna

Nested monadic value

param f

Bind function

returns

Mapped value

Examples

var mx = Seq<Option>(Some(1), Some(2), Some(3));

var ma = mx.KindT<Seq, Option, Option, int>() .BindT(a => Some(a + 1)) .MapT(a => a + 1); .AsT<Seq, Option, Option, int>();

method K<M, K<N, B>> BindT <M, N, A, B> (this K<M, K<N, A>> mna, Func<A, K<M, K<N, B>>> f) Source #

where M : Monad<M>
where N : Monad<N>, Traversable<N>

Runs a monadic bind operation on the nested monads

If you're working with an inner monad that is concrete then you will first need to call KindT to cast the monad to a more general K version. This enables the T variant extensions (like BindT, `MapT, etc.) to work without providing excessive generic arguments all the way down the chain.

Parameters

type M

Outer monad trait

type N

Inner monad trait

type A

Input bound value

type B

Output bound value

param mna

Nested monadic value

param f

Bind function

returns

Mapped value

Examples

var mx = Seq<Option>(Some(1), Some(2), Some(3));

var ma = mx.KindT<Seq, Option, Option, int>() .BindT(a => Seq(Some(a + 1))) .MapT(a => a + 1); .AsT<Seq, Option, Option, int>();

class MonadLaw <F> Source #

where F : Monad<F>

Functions that test that monad laws hold for the F monad provided.

NOTE: Equals must be implemented for the K<F, *> derived-type, so that the laws can be proven to be true. If your monad doesn't have Equals then you must provide the optional equals parameter so that the equality of outcomes can be tested.

Parameters

type F

Functor type

Methods

method Unit assert (Func<K<F, int>, K<F, int>, bool>? equals = null) Source #

Assert that the monad laws hold

NOTE: Equals must be implemented for the K<F, *> derived-type, so that the laws can be proven to be true. If your monad doesn't have Equals then you must provide the optional equals parameter so that the equality of outcomes can be tested.

method Validation<Error, Unit> validate (Func<K<F, int>, K<F, int>, bool>? equals = null) Source #

Validate that the monad laws hold

NOTE: Equals must be implemented for the K<F, *> derived-type, so that the laws can be proven to be true. If your monad doesn't have Equals then you must provide the optional equals parameter so that the equality of outcomes can be tested.

method Validation<Error, Unit> leftIdentityLaw (Func<K<F, int>, K<F, int>, bool> equals) Source #

Validate the left-identity law

NOTE: Equals must be implemented for the K<F, *> derived-type, so that the laws can be proven to be true. If your monad doesn't have Equals then you must provide the optional equals parameter so that the equality of outcomes can be tested.

method Validation<Error, Unit> rightIdentityLaw (Func<K<F, int>, K<F, int>, bool> equals) Source #

Validate the right-identity law

NOTE: Equals must be implemented for the K<F, *> derived-type, so that the laws can be proven to be true. If your monad doesn't have Equals then you must provide the optional equals parameter so that the equality of outcomes can be tested.

method Validation<Error, Unit> associativityLaw (Func<K<F, int>, K<F, int>, bool> equals) Source #

Validate the associativity law

NOTE: Equals must be implemented for the K<F, *> derived-type, so that the laws can be proven to be true. If your monad doesn't have Equals then you must provide the optional equals parameter so that the equality of outcomes can be tested.

class Monad Source #

Monad module

Methods

method K<M, A> pure <M, A> (A value) Source #

where M : Monad<M>

method K<M, A> flatten <M, A> (K<M, K<M, A>> mma) Source #

where M : Monad<M>

method K<M, B> bind <M, A, B> (K<M, A> ma, Func<A, K<M, B>> f) Source #

where M : Monad<M>

method MB bind <M, MB, A, B> (K<M, A> ma, Func<A, MB> f) Source #

where MB : K<M, B>
where M : Monad<M>

method K<M, Unit> when <M> (K<M, bool> Pred, K<M, Unit> Then) Source #

where M : Monad<M>

When the predicate evaluates to true, compute Then

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

returns

Unit monad

method K<M, Unit> when <M> (K<M, bool> Pred, K<IO, Unit> Then) Source #

where M : Monad<M>

When the predicate evaluates to true, compute Then

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

returns

Unit monad

method K<M, Unit> when <M> (K<M, bool> Pred, Pure<Unit> Then) Source #

where M : Monad<M>

When the predicate evaluates to true, compute Then

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

returns

Unit monad

method K<M, Unit> unless <M> (K<M, bool> Pred, K<M, Unit> Then) Source #

where M : Monad<M>

When the predicate evaluates to false, compute Then

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

returns

Unit monad

method K<M, Unit> unless <M> (K<M, bool> Pred, K<IO, Unit> Then) Source #

where M : Monad<M>

When the predicate evaluates to false, compute Then

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

returns

Unit monad

method K<M, Unit> unless <M> (K<M, bool> Pred, Pure<Unit> Then) Source #

where M : Monad<M>

When the predicate evaluates to false, compute Then

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, K<M, A> Then, K<M, A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, K<M, A> Then, K<IO, A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, K<IO, A> Then, K<M, A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, K<IO, A> Then, K<IO, A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, K<M, A> Then, Pure<A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, Pure<A> Then, K<M, A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, Pure<A> Then, Pure<A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, Pure<A> Then, K<IO, A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

method K<M, A> iff <M, A> (K<M, bool> Pred, K<IO, A> Then, Pure<A> Else) Source #

where M : Monad<M>

Compute the predicate and depending on its state compute Then or Else

Parameters

type M

Monad

param Pred

Predicate

param Then

Computation

param Else

Computation

returns

Unit monad

interface Monad <M> Source #

where M : Monad<M>

Monad trait

Parameters

type M

Self referring trait

Methods

method K<M, B> Bind <A, B> (K<M, A> ma, Func<A, K<M, B>> f) Source #

method K<M, A> Flatten <A> (K<M, K<M, A>> mma) Source #

method K<M, B> Map <A, B> (Func<A, B> f, K<M, A> ma) Source #