Монади (програмування)
Монада — абстрактний тип данних в функціональному програмуванні, що походить від відповідного терміну з теорії категорій. В функціональних мовах[які?] найчастіше використовується в ролі синтаксичного цукру для написання імперативної логіки (тобто тої, що має визначений порядок виконання операцій) або в якості механізму обробки помилок.[1][2]
Основними застосуваннями монад у функційному програмуванні є визначення операцій вводу/виводу (I/O) та зміни стану уникаючи побічних ефектів[3]. Принцип дії монад полягає в тому, що, хоча функція і не може робити побічний ефект напряму, вона може створювати значення, що описує бажаний побічний ефект, і яке можна використати коли потрібно. Однак, I/O та керування станом в жодному разі не є єдиними способами використання монад. Вони корисні тоді, коли розробник бажає описати обчислення в чисто функційному стилі, виконуючи паралельно інші обчислення.
Інший варіант застовування монади - механізм обробки помилок. В Гаскелі для таких цілей використовується монада Maybe. Вона має два стани: «Just» та «Nothing». Перший виступає в ролі обгортки, тобто містить всередині себе певне значення яке повертає функція. Другий стан символізує відсутність даних або помилку. Використовуючи властивість прив'язки монад можна передавати значення в обгортці, що зменшує кількість надлишкового коду.
Функційна мова програмування Гаскель інтенсивно використовує монади та має синтаксичні конструкції для полегшення роботи з ними.
- ↑ Philip Wadler (1990). Comprehending Monads. Nice. Архів оригіналу за 29 березня 2008. Процитовано 22 лютого 2007. Proceedings of the 1990 ACM Conference on LISP and Functional Programming
- ↑ Philip Wadler. The Essence of Functional Programming [Архівовано 10 лютого 2007 у Wayback Machine.]. Conference Record of the Nineteenth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. 1992.
- ↑ Simon L. Peyton Jones, Philip Wadler. Imperative Functional Programming [Архівовано 16 червня 2008 у Wayback Machine.]. Conference record of the Twentieth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Charleston, South Carolina. 1993
- A (hopefully) painless introduction to monads. Архів оригіналу за 17 лютого 2007.
- What the hell are Monads?. Архів оригіналу за 9 травня 2008.
- You Could Have Invented Monads! (And Maybe You Already Have.), a gentle introduction. Архів оригіналу за 24 грудня 2006. Процитовано 22 лютого 2007.
- All About Monads. Архів оригіналу за 19 січня 2007. Процитовано 22 лютого 2007.
- Monads as Containers. Архів оригіналу за 11 жовтня 2006. Процитовано 22 лютого 2007.
- Monads for the Working Haskell Programmer. Архів оригіналу за 19 лютого 2007. Процитовано 22 лютого 2007.
- Philip Wadler. Monads for Functional Programming (PDF). Архів оригіналу (PDF) за 17 квітня 2007. Процитовано 22 лютого 2007.
- Henk-Jan van Tuyl. A tour of the Haskell Monad functions. Архів оригіналу за 10 березня 2007. Процитовано 22 лютого 2007.
- The Haskell Programmer's Guide to the IO Monad — Don't Panic (PDF). Архів оригіналу (PDF) за 24 березня 2015.
- Monads in Ruby. Архів оригіналу за 20 липня 2006.
Це незавершена стаття з інформатики. Ви можете допомогти проєкту, виправивши або дописавши її. |