&gt; <i>Haskell is a great language for expressing computations, the thing CS is about.</i><p>I think Haskell is good at expressing a narrow range of ideas that, honestly, aren&#x27;t all that fruitful outside the FP field. There are three main reasons why it&#x27;s not a great language for expressing arbitrary algorithms:<p>1) It uses the pointer model instead of the integer RAM model. That leads to extra logarithmic factors.<p>2) Immutability. That&#x27;s hypothesized to also cause extra logarithmic factors, but AFAIK that&#x27;s still an open problem.<p>3) Non-strict evaluation. That wreaks havoc with space complexity, and compositional analysis of performance in general.<p>Yes, you can add epicycles to remedy these drawbacks (arrays, ST, strictness annotations). But I&#x27;d rather use a C-like language in the first place. That&#x27;s closer to the &quot;core&quot; of CS as I understand it, and that&#x27;s how most algorithm research is done.