# Functors and Monads Support in C# Using LINQ
LINQ queries provide native support for [[Covariant Functor|functors]] and [[Monad|monads]] in C#.
To enable the support you need to include two public static methods to the type (`Select` and `SelectMany`). The following is an example taken from an implementation of result monads in C#.
```csharp
public static class Result
{
	public static Result<T2, TError> Select<T1, T2, TError>(
		this Result<T1, TError> m,
		Func<T1, T2> map) =>
			m.Map(map);
	
	public static Result<T3, TError> SelectMany<T1, T2, T3, TError>(
		this Result<T1, TError> m,
		Func<T1, Result<T2, TError>> f,
		Func<T1, T2, T3> mapper) =>
			m.Bind(t1 => f(t1).Map(t2 => mapper(t1, t2)));
}
```
Note that the signature of `SelectMany` does not match the signature of the typical `bind`, that is to allow for some features of LINQ queries such as the `let` syntax.