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