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