Монада (программирование)
Монада в программировании — это абстракция линейной цепочки связанных вычислений. Монады повсеместно применяются в языке Хаскелл. Она описывается полиморфным контейнерным типом с одним параметром, стратегией «поднятия» значения в монаду и стратегией связывания двух вычислений, второе из которых зависит от параметра, вычисляемого первым:
m :: * -> * return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b
В языке Хаскелл к этим операциям добавляется также
fail :: String -> m a
Эта операция не имеет отношения к теоретической сущности монад, однако используется в случае ошибки сопоставления с образцом внутри монадического кода.
В частности, к монадам относятся:
- IO (монада строго последовательных вычислений): стратегия связывания — «сначала первое вычисление, затем второе»
- Maybe (монада вычислений с отсутствующими значениями): стратегия связывания — «если первое вычисление дало результат, то второе; иначе — отсутствие результата»
- List (монада вычислений с несколькими результатами): стратегия связывания — «все возможные результаты второго вычисления, применененного к каждому из вычисленных первым значений параметра»
- State (монада вычислений с переменной состояния): стратегия связывания — «начать второе вычисление с состоянием, измененным в результате первого»
- И некоторые другие.
Монады также применяются для синтаксического анализа, продолжений (continuations), вероятностных вычислений и в других случаях.
Концепция монад в программировании была унаследована из теории категорий: Монада (математика)
См. также
Ссылки
Туториалы
- Monad Tutorials Timeline Большая коллекция монадных туториалов в порядке появления.
- What the hell are Monads?
- You Could Have Invented Monads! (And Maybe You Already Have.), простое введение
- All About Monads
- Monads as Computation
- Monads as Containers
- Monads for the Working Haskell Programmer
- The Haskell Programmer’s Guide to the IO Monad — Don’t Panic
- Introduction to Haskell, Part 3: Monads
- On Monads
- Crash Monad Tutorial — статья о монадах, объясняющая их с точки зрения теории категорий
- Монады — статья о монадах на русском языке
- Евгений Кирпичев. Монады в Haskell
Другие статьи
- A tour of the Haskell Monad functions
- Notions of Computation and Monads от Eugenio Moggi, первая статья, предлагающая использование монад в программировании
- «Monads for Functional Programming» от Philip Wadler, описание монад в языке Хаскелл (написано еще до того, как они в нем появились)
de:Monade (Typkonstruktion) en:Monad (functional programming) fi:Monadi (funktionaalinen ohjelmointi) fr:Monade (informatique) it:Monade (informatica) ja:モナド (プログラミング) uk:Монади (програмування) zh:单子
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....