черти и монада
Mar. 6th, 2016 07:49 pmЕсли вы читали "Братья Карамазовы", а также поэму "Черный Человек" Есенина, вы где-то в курсе. Ну еще "Российского Жиль Блаза", и еще "Фауста" Гете, или "Сказку о Попе и Работнике его Балде", или La Vida de Lazarillo de Tormes (ну ладно, последнее пропустим, это уже для филологов - ведь мы же тут не филологи?).
Короче, если что-то не получается, то это черт гадит. Рот надо крестить, когда зеваешь. Или лучше не зевать.
Потому что программист как зевнет, так у него или buffer overflow, или ексепшон бросает, или null какой-нибудь, придуманный Хором, бывшим аспирантом МГУ, или None, Empty, Nothing, что-то такое, чего Не Ждали. На которое надо креститься, ловить его, перехватывать - и тут же подменять хорошим, кошерным значением.
Эрик Мейер сказал, что на самом-то деле на компьютере любое вычисление сидит внутри монады - но это он мне сказал, и слышали, может, человек пять-десять (ну, Ваня вот слышал,
_navi_). Остальные и не в курсе.
Например, у нас на предприятии принято, если member id пациента на страницах не нашли, то не произносить его имя, а возвращать "", пустую строку. Представьте потом пациента, он звонит в страховку, а ему там скажите ваш member id, а он такой замолкает, произнося пустую строку - лишь бы черта не поминать.
Объектные программисты, живущие в категории Эйленберга-Мура, черта не то что не поминают, а делают вид, что его и нету.
Короче, если у вас ексепшен, или нал, или что-нибудь такое, то вы обычно стесняетесь, и пытаетесь прыснуть на этого чорта святой водой, и сделать вид, что ничего и не было, все нормально, функция тотальна.
Одновременно признавать существование черта и делать все, чтобы этот черт отсутствовал, тут какая-то психология хитрая, а я не психолог.
У функциональных же программистов черт - часть дискурса. Еще Гедель учил, что не все можно сосчитать; и Тьюринг тоже учил. В скале это более-менее отражено. В скале Nothing can be cast to Any. Не думаю, что с первого захода вы поняли, что я сказал. Я сказал, что Nothing может быть любым типом (в частности, Any), потому что узбагойтесь, значение типа Nothing до вашего кода не дойдет. Никогда.
Но речь не о том. Вот монада Maybe, она же Option, она помогает признавать тот простой факт, что нетотальные функции тоже ничо. В хаскеле на это забивают; у них есть функция head, возвращающая голову списка даже если у списка нет головы (скажем, это Иоанн Креститель у нас, или Олоферн); ну хаскель древний язык, и существование черта признает только в смысле что вне Храма ж одни черти, а в Храме чистота.
Наблюдать же, как объектный программист берет эту монаду и тут же начинает материализацию духов, в смысле, вытаскивает из нее значение, и, зная, что там может и черт прятаться, на случай черта тут же произносит "чур-чур-чур", и подбрасывает "дефолтное значение". Это дефолтное значение - как святая вода, попрыскаешь им на черта - и черта как бы нету. Он, конечно, есть, но мы закроем глаза.
Вот как бы от этого религиозного подхода избавиться?
Я попробую завтра с индусами нашими поговорить. Ведь у них же черта нету. А ООП есть.
UPD. Regarding God's role in Entscheidungs Problem, AC, etc: see http://timelets.livejournal.com/386140.html
Короче, если что-то не получается, то это черт гадит. Рот надо крестить, когда зеваешь. Или лучше не зевать.
Потому что программист как зевнет, так у него или buffer overflow, или ексепшон бросает, или null какой-нибудь, придуманный Хором, бывшим аспирантом МГУ, или None, Empty, Nothing, что-то такое, чего Не Ждали. На которое надо креститься, ловить его, перехватывать - и тут же подменять хорошим, кошерным значением.
Эрик Мейер сказал, что на самом-то деле на компьютере любое вычисление сидит внутри монады - но это он мне сказал, и слышали, может, человек пять-десять (ну, Ваня вот слышал,
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Например, у нас на предприятии принято, если member id пациента на страницах не нашли, то не произносить его имя, а возвращать "", пустую строку. Представьте потом пациента, он звонит в страховку, а ему там скажите ваш member id, а он такой замолкает, произнося пустую строку - лишь бы черта не поминать.
Объектные программисты, живущие в категории Эйленберга-Мура, черта не то что не поминают, а делают вид, что его и нету.
Короче, если у вас ексепшен, или нал, или что-нибудь такое, то вы обычно стесняетесь, и пытаетесь прыснуть на этого чорта святой водой, и сделать вид, что ничего и не было, все нормально, функция тотальна.
Одновременно признавать существование черта и делать все, чтобы этот черт отсутствовал, тут какая-то психология хитрая, а я не психолог.
У функциональных же программистов черт - часть дискурса. Еще Гедель учил, что не все можно сосчитать; и Тьюринг тоже учил. В скале это более-менее отражено. В скале Nothing can be cast to Any. Не думаю, что с первого захода вы поняли, что я сказал. Я сказал, что Nothing может быть любым типом (в частности, Any), потому что узбагойтесь, значение типа Nothing до вашего кода не дойдет. Никогда.
Но речь не о том. Вот монада Maybe, она же Option, она помогает признавать тот простой факт, что нетотальные функции тоже ничо. В хаскеле на это забивают; у них есть функция head, возвращающая голову списка даже если у списка нет головы (скажем, это Иоанн Креститель у нас, или Олоферн); ну хаскель древний язык, и существование черта признает только в смысле что вне Храма ж одни черти, а в Храме чистота.
Наблюдать же, как объектный программист берет эту монаду и тут же начинает материализацию духов, в смысле, вытаскивает из нее значение, и, зная, что там может и черт прятаться, на случай черта тут же произносит "чур-чур-чур", и подбрасывает "дефолтное значение". Это дефолтное значение - как святая вода, попрыскаешь им на черта - и черта как бы нету. Он, конечно, есть, но мы закроем глаза.
Вот как бы от этого религиозного подхода избавиться?
Я попробую завтра с индусами нашими поговорить. Ведь у них же черта нету. А ООП есть.
UPD. Regarding God's role in Entscheidungs Problem, AC, etc: see http://timelets.livejournal.com/386140.html