title: What is an (composite) effect (possibly represented as a Monad+Monad Transformers) ? Precise, clear, short answer/definition?
body: <p>Motivation : "functional programs" focus on being "pure", and we all know what "pure" is : referential transparency, "no-effects", etc...</p>
  
  <p>but the problem is that this only one side of the coin.</p>
  
  <p>I have not yet seen a clear definition of what an effect is.</p>
  
  <p>In Haskell for example practically every non trivial "Monad" can be considered as an "effect" and there gizillion types of specific monads out there ... the problem is I don't see what is the connection between them ?</p>
  
  <p>Say : <code>[]</code> (List) Monad vs <code>State</code> monad vs <code>IO</code> monad vs <code>Future</code> monad etc... <strong>how are these all effects ?</strong></p>
  
  <p>What do they have in common ?</p>
  
  <p>I understand intuitively that these are all "effects" but how ? Why ? What connects them ? When the values of these types (say <code>[a]</code>) are itself "effect-less"/pure/immutable ?</p>
  
  <p><strong>The answer I am looking for is not "anything that is not referentially transparent".</strong> </p>
  
  <p>That is a "negative answer", I am looking for the opposite "type of answer", something that tells me what IS an effect and not what is it NOT.</p>
  
  <p>Especially the question lies in : <code>IO</code> is the "ultimate" effect. Now, in what sense do we/can we/should we divide <code>IO</code> into "sub-effects" that are "non-interacting" => this brings us towards one possible answer: Monad Transformers. They try to solve the problem of composing effects BUT they do not themselves answer the question : what is an effect ? More importantly, how should I devide a "large/wide effect" (such as <code>IO</code>), into "smaller"/"narrower" effects, such as <code>[]</code>, <code>Future</code>, <code>Cont</code>, <code>Writer</code>, <code>Reader</code>, <code>State</code>, <code>Maybe</code> etc... ?</p>
  
  <p>The answer to the question : what is an effect should serve as a possible inspiration to solve problems such as the above "how to divide <code>IO</code>" into "sub"/simpler effects ?</p>
  
  <p>Thanks.</p>