В большой серии сообщений Эрик Липперт излагает так называемый "шаблон Monad" для типов .NET, которые вроде бы действуют как монады и реализуют возврат и привязку для некоторых из них.
В качестве примеров монадических типов он дает:
-
Nullable<T> -
Func<T> -
Lazy<T> -
Task<T> -
IEnumerable<T>
У меня есть два вопроса:
-
Я понимаю, что
Nullable<T>похож наMaybeв Haskell, и привязка нескольких действийMaybeпредставляет собой набор операций, которые могут сбой в любой точке. Я знаю, что монада-список (IEnumerable<T>) представляет собой недетерминизм. Я даже понимаю, что делаетFuncкак монада (Readermonad). Каковы монадические семантикиLazy<T>иTask<T>? Что значит связать их? -
Есть ли у кого-нибудь еще примеры типов в .NET, которые похожи на монады?