Монада — абстрактний тип даних у функційному програмуванні, що походить від відповідного терміна з теорії категорій. У функціональних мовах{ найчастіше використовується в ролі синтаксичного цукру для написання імперативної логіки (тобто тої, що має визначений порядок виконання операцій) або як механізм обробки помилок. Proceedings of the 1990 ACM Conference on LISP and Functional ProgrammingPhilip Wadler. The Essence of Functional Programming . Conference Record of the Nineteenth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. 1992.

Основними застосуваннями монад у функційному програмуванні є визначення операцій вводу/виводу (I/O) та зміни стану, уникаючи побічних ефектівSimon L. Peyton Jones, Philip Wadler. Imperative Functional Programming . Conference record of the Twentieth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Charleston, South Carolina. 1993. Принцип дії монад полягає в тому, що, хоча функція і не може робити побічного ефекту напряму, вона може створювати значення, що описує бажаний побічний ефект, і яке можна використати коли потрібно. Однак, I/O та керування станом в жодному разі не є єдиними способами використання монад. Вони корисні тоді, коли розробник бажає описати обчислення в чисто функційному стилі, виконуючи паралельно інші обчислення.

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

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

Приклади

Див. також

Функційне програмування Haskell Програмування

Примітки

Посилання