Мотивация: «функциональные программы» сосредоточены на том, чтобы быть «чистыми», а мы все знаем, что такое «чистота»: ссылочная прозрачность, «отсутствие эффектов» и т. д.
но проблема в том, что это только одна сторона медали.
Я еще не видел четкого определения того, что такое эффект.
В Haskell, например, практически каждая нетривиальная «монада» может рассматриваться как «эффект», и существует миллиард типов конкретных монад ... проблема в том, что я не вижу, какая между ними связь?
Произнесите: []
(список) монада vs State
монада vs IO
монада vs Future
монада и т.д... как все эти эффекты?
Что они имеют общего ?
Я интуитивно понимаю, что это все "эффекты", но как? Почему ? Что их связывает? Когда значения этих типов (скажем, [a]
) сами по себе являются «безэффектными»/чистыми/неизменяемыми?
Ответ, который я ищу, это не "все, что непрозрачно с точки зрения ссылок".
Это «отрицательный ответ», я ищу противоположный «тип ответа», что-то, что говорит мне, что ЯВЛЯЕТСЯ эффектом, а не чем оно НЕ является.
Особенно вопрос заключается в том, что IO
является "конечным" эффектом. Теперь, в каком смысле мы/можем/должны ли мы делить IO
на «подэффекты», которые «невзаимодействуют» => это подводит нас к одному возможному ответу: трансформеры монад. Они пытаются решить проблему сочинения эффектов, НО сами не отвечают на вопрос: что такое эффект? Что еще более важно, как мне разделить «большой/широкий эффект» (такой как IO
) на «меньшие»/«более узкие» эффекты, такие как []
, Future
, Cont
, Writer
, Reader
, State
, Maybe
и т.д...?
Ответ на вопрос: что такое эффект, должен послужить возможным источником вдохновения для решения таких проблем, как вышеприведенная «как разделить IO
» на «под»/более простые эффекты?
Спасибо.
IO
) предоставляют способ работы с эффектами в чистом мире. - person Thilo   schedule 22.11.2018