title: Why functional languages are amenable to parallelization?
body: <p>There is another thread titled "Programming language for functional parallelism: F# vs Haskell" in which the OP stated "Functional programming has immutable data structures and no side effect which are inherently suitable for parallel programming."</p>
  
  <p>Jon Harrop, in his answer, argued that "Parallelism is solely about performance and purity degrades performance. So purely functional programming is not a good starting point if your objective is to get decent performance."</p>
  
  <p>Well, I am not planning to go into whether functional programming actually improves performance or not; it seems that it is an implementation issue. What I am interested is on the conceptual level:  </p>
  
  <p>Are "immutable data" and "freedom from side effect" BOTH required for easy parallelization?  And are they sufficient conditions or necessary conditions? Are they more than necessary to guarantee data independence or commutativity?  References to academic literature is appreciated.</p>