Что такое (композитный) эффект (возможно, представленный как Monad+Monad Transformers)? Точный, четкий, краткий ответ/определение?

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

но проблема в том, что это только одна сторона медали.

Я еще не видел четкого определения того, что такое эффект.

В Haskell, например, практически каждая нетривиальная «монада» может рассматриваться как «эффект», и существует миллиард типов конкретных монад ... проблема в том, что я не вижу, какая между ними связь?

Произнесите: [] (список) монада vs State монада vs IO монада vs Future монада и т.д... как все эти эффекты?

Что они имеют общего ?

Я интуитивно понимаю, что это все "эффекты", но как? Почему ? Что их связывает? Когда значения этих типов (скажем, [a]) сами по себе являются «безэффектными»/чистыми/неизменяемыми?

Ответ, который я ищу, это не "все, что непрозрачно с точки зрения ссылок".

Это «отрицательный ответ», я ищу противоположный «тип ответа», что-то, что говорит мне, что ЯВЛЯЕТСЯ эффектом, а не чем оно НЕ является.

Особенно вопрос заключается в том, что IO является "конечным" эффектом. Теперь, в каком смысле мы/можем/должны ли мы делить IO на «подэффекты», которые «невзаимодействуют» => это подводит нас к одному возможному ответу: трансформеры монад. Они пытаются решить проблему сочинения эффектов, НО сами не отвечают на вопрос: что такое эффект? Что еще более важно, как мне разделить «большой/широкий эффект» (такой как IO) на «меньшие»/«более узкие» эффекты, такие как [], Future, Cont, Writer, Reader, State, Maybe и т.д...?

Ответ на вопрос: что такое эффект, должен послужить возможным источником вдохновения для решения таких проблем, как вышеприведенная «как разделить IO» на «под»/более простые эффекты?

Спасибо.


person jhegedus    schedule 22.11.2018    source источник
comment
Не уверен, что у него есть точный/ясный/краткий ответ, который вы ищете, но здесь /r/haskell обсуждает, что такое побочный эффект reddit.com/r/haskell/comments/2p9cvz/   -  person Thilo    schedule 22.11.2018
comment
Монады можно считать эффектом, это странно. Эти две концепции кажутся довольно ортогональными. Как вы сказали, монады обеспечивают абстракцию для работы с композицией. Некоторые монады (такие как List) вообще не имеют ничего общего с эффектами. Другие (IO) предоставляют способ работы с эффектами в чистом мире.   -  person Thilo    schedule 22.11.2018
comment
(1) Дайте нам знать, если вы считаете, что предложенного вопроса недостаточно. (2) Предлагаемый вопрос не обсуждает преобразователи монад, но я не думаю, что это существенно: более широкое понятие эффекта обобщается на аппликативные функторы, для составления которых не нужны преобразователи. (3) @Thilo: Что касается ортогональности, я бы сказал, что эффект имеет два общеупотребительных значения: более узкое значение, которое является ортогональным, и более широкое значение, которое не является ортогональным. Мой ответ на предложенный вопрос делает этот случай более подробным.   -  person duplode    schedule 22.11.2018
comment
спасибо за комментарии, только что вернулся домой с работы, подумаю об этом еще немного и вернусь к вашим комментариям, как только я подумаю об этом немного больше   -  person jhegedus    schedule 22.11.2018