UProLa

Неокріпші думки

The Best Monad Tutorial

with 5 comments

По традиції, кожен, хто зрозумів, наскільки монади прості і примітивні, пише свій monad tutorial, вважаючи, що саме він напише його правильно, і саме після його посту всі зрозуміють, що таке монади і як ними користуватись.
NB. Якщо ви знаєте, що таке монади, то вам краще не читати – засмієте. Якщо ніколи не чули про монади – краще не читати, бо не зрозумієте навіщо це все написано.
PS. На протязі посту я утримаюсь від вживання слів “монада”, “типи”, “хаскель” і обмежусь повсякденним світом (трошки фантастичним). Ізоморфізми будуйте самі, або питайте в коментарях.

Уявіть собі прекрасну, ГОЛУ дівчину. Це важливо, адже вона буде об’єктом наших роздумів.

Через те, що вона гола, вона дуже соромиться і не хоче показуватись на люди. Варто зазначити тільки, що цей сором відноситься до суспільної моралі, а не індивідуальної (тобто, коли на люди – то соромиться, якщо тет-а-тет і знає, що твій співбесідник НІКОМУ більше нічого не розповість, то сорому – як корова язиком).

Ця дівчина зробила хитро – вона за допомогою магії залізла у закритий контейнер. Всередину контейнеру можна потрапити тільки через магію, вилізти з нього – ніяк не можна. Цим вона забезпечила собі надійний захист від чужих поглядів і від суспільного осудження. Проте ціною свого заточення.

Ви ж знаходитесь по іншу сторону цього непроникного бар’єру і горите одним бажанням – зустрітись з цією дівчиною (ну вона ж прекрасна!), поспілкуватись з нею, попити чаю, пограти в теніс, – короче, щось зробити з цією дівчиною.

Уява працює?

Хоч контейнер і закритий для людей, у вашому розпорядженні три богатиря. Перед кожним богатирем стоїть важливе завдання – НЕ випускати людей з контейнерів.

Власне далі ми будемо говорити про способи спілкування з дівчиною, маючи у розпорядженні тільки цих трьох богатирів.

Перший богатир робить просту річ. Він засовує вас (або пачку об’єктів) у порожній контейнер. Тобто, приходите з своїм контейнером, і він вас туди поміщує. Назад шляху немає, як ви розумієте. Важливо, що контейнер повинен бути порожнім, прямо у контейнер до дівчини він вас не запихне.

Другий богатир робить не менш просту річ. Він бере два контейнери і об’єднує їх в один, так що люди в цих контейнерах опиняються в одному.

Якщо у вас добре з логікою, то вам тепер видно, як зустрітись з дівчиною: просите першого богатиря засунути вас у поржоній контейнер, а другому даєте вказівку об’єднати вас і контейнер з дівчиною. Все, романтичний вечір на двох забезпечено ціною свободи.

Навіщо третій богатир?

Третій богатир розбиває контейнер, але тільки у тому випадку, коли люди з контейнеру не зможуть вийти у відкритий світ. Наприклад, так може статись, якщо люди знаходятся у подвійно вкладеному контейнері (контейнер у контейнері). Розбиття зовнішьої шкарлупки виведе на світ інший контейнер (в якому будуть люде), і основне правило богатирів порушено не буде.

Як скористатись послугами цього богатиря з користю?

Якщо ви пам’ятаєте, то поговорити з дівчиною ви можете тільки ціною замикання у її контейнері. Чи можна якось збільшити свободу?

Можна.

Для цього вам потрібно зробити (або придбати) свій контейнер, життя в якому ви будете вважати комфортним. Назвем його зеленим контейнером.

Й так, що ви робите.
1. Просите першого богатиря засунути у звичайний контейнер вас, зелений контейнер і свого клона (клона першого богатиря).
2. Просите другого богатиря об’єднати ваш контейнер з контейнером дівчини.
3. Тепер в контейнері дівчини 4 об’єкти: ви, дівчина, зелений контейнер і клон першого богатиря
4. Одягаєте дівчину (те, про що вона мріяла в заточенні!) і просите клона засунути вас обох у зелений контейнер.
5. Просите третього богатиря (який знаходиться в реальному світі, тобто поза всім контейнерами) розбити контейнер дівчини. В результаті звільниться клон богатиря, але він ж не людина, його випускати можна.
6. Тепер ви заточені з дівчиною, проте у комфортабельних для себе умовах – щебечуть пташки, тече річечка і сонечко усміхається. І неважливо, що десь там за бар’єром існує реальний світ.

Епілог.
Я міг би на цьому і завершити, але ще одне важливе питання не вирішено. Справа в тому, що “реальний світ”, як ми його називали, насправді… заточений у “світовий контейнер”! Це було зроблено для того, щоб люди ніколи не побачили світ, де живуть боги.

І десь там, за межами реального світу боги бачать: в реальному світі не залишилось більше людей, тільки зелений контейнер і три богатирі. Для чого лишнє вкладення, й так людей в “реальному світі” більше не стане – останній заліз у зелений контейнер. І вони дають вказівку – розбити “світовий бар’єр”, зробити зелений контейнер новим “реальним світом”. І якщо так сталось, значить життя продовжується, зміни настають і все набуває змісту.

Зі сторони богів це виглядає, як ніби ви витягнули дівчину з контейнера, одягнули її, змінили світ і все це тільки при допомозі трьох богатирів, які НІРАЗУ не порушили свого правила – людей з контейнерів не випускати.

Written by danbst

Лютий 16, 2012 at 11:32

Оприлюднено в Програмування

Відповідей: 5

Subscribe to comments with RSS.

  1. Вау, хух.
    Перше відчуття: що мозок знесло кудись далеко.
    Про монади чув, але ще не розумію, так що писати, гадаю, маю право🙂
    Отже, ззовні наш функціональний світ, нам потрібно дістатись до даних/побічних ефектів, тоді як випустити ми їх просто так ми не можемо, оскільки з ними сам світ стане іншим, функції почнуть давати інші результати (що для математика є кінцем світу!) і так далі. Отже, потрібно створити новий світ. А з цього моменту here be dragons.

    Dmytro Sirenko

    Лютий 26, 2012 at 10:51

  2. В порядку накурених аналогій я б запропонував таку:
    Є гарна цнотлива дівчина. Втратити цноту вона може тільки один раз (залишимо за кадром IORef та інші домішки unsafe-операцій із відновлення цноти), але її чоловікові-мусульманину хочеться (а воля чоловіка — закон), щоб щоранку її цнота відновлювалась, як у гурії в мусульманськму раю. В певному розумінні ця гурія може виконати це бажання для свого вічного райського чоловіка, народивши за райську ніч таку ж гурію, як вона, тільки знову цнотливу, яку можна пізнати знову і знову.

    Dmytrish

    Червень 4, 2012 at 15:26


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: