Большинство примеров монад, которые я видел в C #, написаны примерно так:
public static Identity Bind(this Identity a, Func> func) {
return func(a.Value);
}
Например, см. http://mikehadlow.blogspot.com/2011/01/monads-in-c-3-creating-our-first-monad.html.
Вопрос в том, зачем требовать func
, чтобы вернуть Identity
? Если я использую следующее определение:
public interface IValue {
public IValue Bind(Func func)
}
, тогда я действительно могу использовать ту же func
для Lazy
, Task
, Maybe
и т. Д., Фактически не зависящие от фактического типа, реализующего IValue
.
Есть ли что-то важное? Я здесь не хватает?