&gt; I think that Haskell has maybe done a bit of a disservice by making so much hay about using monads for side effects. That&#x27;s super-important in the context of Haskell, of course, but it gives the unfortunate and false impression that that&#x27;s what they&#x27;re really about.<p>I don&#x27;t think this is just due to Haskell&#x27;s specific needs. Monads were originally introduced into computer science as a tool for denoting delimited effects, and many researchers have commented on the close correspondence between monads and effects (in both directions). If you take any given piece of monadic code, you can interpret it as a typesafe way of specifying an imperative computation in a delimited part of the program. Haskell&#x27;s do-syntax particularly emphasizes this by even making it &quot;look&quot; imperative, but you could still interpret it that way even without the syntax helping you.<p>Even in the C# example you use, what is .AsParallel() denoting, if not an effect?