Монади (програмування)

Монада — абстрактний тип данних в функціональному програмуванні, що походить від відповідного терміну з теорії категорій. В функціональних мовах[які?] найчастіше використовується в ролі синтаксичного цукру для написання імперативної логіки (тобто тої, що має визначений порядок виконання операцій) або в якості механізму обробки помилок.[1][2]

Основними застосуваннями монад у функційному програмуванні є визначення операцій вводу/виводу (I/O) та зміни стану уникаючи побічних ефектів[3]. Принцип дії монад полягає в тому, що, хоча функція і не може робити побічний ефект напряму, вона може створювати значення, що описує бажаний побічний ефект, і яке можна використати коли потрібно. Однак, I/O та керування станом в жодному разі не є єдиними способами використання монад. Вони корисні тоді, коли розробник бажає описати обчислення в чисто функційному стилі, виконуючи паралельно інші обчислення.

Інший варіант застовування монади - механізм обробки помилок. В Гаскелі для таких цілей використовується монада Maybe. Вона має два стани: «Just» та «Nothing». Перший виступає в ролі обгортки, тобто містить всередині себе певне значення яке повертає функція. Другий стан символізує відсутність даних або помилку. Використовуючи властивість прив'язки монад можна передавати значення в обгортці, що зменшує кількість надлишкового коду.

Функційна мова програмування Гаскель інтенсивно використовує монади та має синтаксичні конструкції для полегшення роботи з ними.

Приклади

[ред. | ред. код]

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. Philip Wadler (1990). Comprehending Monads. Nice. Архів оригіналу за 29 березня 2008. Процитовано 22 лютого 2007. Proceedings of the 1990 ACM Conference on LISP and Functional Programming
  2. 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.
  3. 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

Посилання

[ред. | ред. код]