пятница, 16 мая 2014 г.

Монолит

Молодой монах Джишин подошёл к учителю Кайму и сказал: "Расскажите мне о Храме Чугунного Неба, где вы были первым учеником".

Кайму ответил: "Это странное и опасное место. Знание висит в воздухе густом как туман, но если там задержаться на час, Вы будете знать меньше, чем когда туда вошли."

Джишин решил, что надо увидеть, как такое может быть правдой. Так он туда и отправился.

Согласно его карте этот храм располагался в районе лесистого холма у подножия высоких гор; дорожный знак на главной дороге указывал на заброшенную тропу. По ней Джишин прошёл через большие Врата AND и обнаружил, что поднимающаяся тропа действительно скрывается в тумане, поднимающемся большими клубами из рощи кипарисов, лежащей далее по склону. Туман сгущался у основания бледной башни в центре храмовой территории. Тропа, отмеченная влажными камнями, привела Джишина к её ступеням.

"Что это за место, приятель?" - спросил он монаха в белых одеждах, сидящего на ступенях.

Монах оторвался от кода Haskell, который он изучал: "Посторонние называют его Башней Слоновьего Бивня, хотя мы знаем её под другим именем. Но ответьте мне на вопрос: Вы инженер-программист?"

"И в сердце, и на деле", - ответил Джишин.

"Если хотите, можете всё обдумать, а затем следуйте по тропе к кипарисовой роще и побеседуйте с медитирующими там монахинями", - сказал монах в белых одеждах. - "Эта башня пока не для Вас".



В роще туман сгустился, став тёплым и горьким на вкус; откуда-то спереди шёл звук пузырящейся воды. Деревья расступились, и Джишин оказался на поляне, где сидели четыре монахини в белых одеждах, созерцая монолит из блестящего чёрного базальта. На нём были надписи, каких монах никогда раньше не видел:
    (>>=) :: m a -> (a -> m b) -> m b
        (>>) :: m a -> m b -> m b
            return :: a -> m a
"Что это за камень, уважаемые дамы?" - спросил Джишин.

"Мы называем его Монада", - сказала первая монахиня.

"Почему вы так почитаете его?" - спросил Джишин.

"Через него мы можем прикоснуться к нечистому не боясь повреждений", - сказала вторая монахиня. - "Мы можем срубить Вроде-дерево Вроде-топором и всегда слышать Вроде-звук, когда оно падает - даже если звук вообще Ничто, топор не реален или нет дерева, чтобы срубить".

"Не могли бы вы... объяснить это объяснение?" - спросил Джишин.

"Он даёт нам возможность кодировать без ошибок", - сказала третья монахиня, - "ибо мы считаем функцию безопасной, только если один её вход определяет её выход. Но когда функция сочится побочными эффектами, то из каждой капли вина может выскочить виноградная лоза и проколоть наше приложение своими шипами. Монада говорит нам, как накладывать повязку, чтобы остановить это течение. Мы оборачиваем функцию сверху, связываем с реальным миром снизу; мы передаем это внутрь, трясём и вытаскиваем обратно. И всё!"

"А эта надпись... Это код?" - спросил Джишин, восхищаясь монолитом.

Монахини переглянулись: "Когда-нибудь все будут знать его так же как и 20 GOTO 10 и так же легко читать. Но ответьте нам на вопрос: Вы инженер-программист?"

"Я больше не уверен", - ответил Джишин, окончательно запутавшись.

И в тот момент молодой монах просветился.

Комментарий Ци

По иронии судьбы, у Монады всегда есть как минимум один побочный эффект: она заставляет меня чувствовать себя идиотом.

Стихотворение Ци

Экран темнеет.
Точки с запятой прыгают по четырём углам окна.
Буря может сравнять высокий холм с землёй -
Но когда меняется мир, результат бури - большая загадка.

Original: Monolith