# 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.