user907: I can think of two major reasons as to why Cardano chose a strongly-typed functional language for it's Blockchain:

Strongly-typed - because as the capabilities of the Blockchain and scripts become more powerfull, type safety is a must-have to ensure determinism and security.
Functional - because it adapts very well with the UTXO design.

So my question is doesn't Haskell already fit the bill? Why is the Plutus library, its intermediary representations and Plutus Core even needed?

user4023: Eager vs Lazy Evaluation
Haskell is used for programs that require a high degree of formal verification. That's why both off-chain and on-chain code for Cardano is written in Haskell. Plutus is visually similar to Haskell, but unlike Haskell, the language is Eagerly Evaluated.
4 widely available Haskell's implementations – GHC, NHC98, Hugs98, and HBC compilers – all use lazy evaluation. That was the core reason to launch a new language for smart contracts' developers.
The second reason is: on Plutus platform, GHC compiles the off-chain code, while the Plutus compiler compiles the on-chain code. Third reason is quite obvious: the complexity of Plutus is much lower than that of Haskell.

user6195: There are many reasons. For example:

You need tooling for the communication between the on-chain and the off-chain code and many other tasks.
You need tooling that generates code where the on-chain code is quite specific. You can't use the regular machine code that the Haskell compiler gives you and run it on the blockchain.
With a language so versatile as Haskell, you can write extremely complex code. This is great in some settings, but with smart contracts, it increases the chances of error.

Those are some of the issues that you don't have to deal with because of Plutus:

Plutus provides a lot of infrastructure developers would have to create themselves if they'd just use naked Haskell. So it saves effort and makes it easier to develop smart contracts.
It limits the library interfaces available to developers making it straightforward for them to write secure and performant code.
In the blockchain, you want a code format that is designed to be easy to reason about, closely implements the mathematical specification, and allows you to be confident that it's correctly implemented. That's why we have Plutus Core.

Sources:

IOHK Language Architect - Manuel Chakravarty Interview
Keynote talk by Manuel Chakravarty: Plutus - Functional Smart Contracts on Cardano


907: <p>I can think of two major reasons as to why Cardano chose a strongly-typed functional language for it's Blockchain:</p>
<ol>
<li>Strongly-typed - because as the capabilities of the Blockchain and scripts become more powerfull, type safety is a must-have to ensure determinism and security.</li>
<li>Functional - because it adapts very well with the UTXO design.</li>
</ol>
<p>So my question is doesn't Haskell already fit the bill? Why is the Plutus library, its intermediary representations and Plutus Core even needed?</p>
 4023: <h2>Eager vs Lazy Evaluation</h2>
<p>Haskell is used for programs that require a high degree of formal verification. That's why both off-chain and on-chain code for Cardano is written in Haskell. <strong>Plutus</strong> is visually similar to Haskell, but unlike Haskell, the language is <a href="https://handwiki.org/wiki/Eager_evaluation" rel="nofollow noreferrer">Eagerly Evaluated</a>.</p>
<p>4 widely available Haskell's implementations – GHC, NHC98, Hugs98, and HBC compilers – all use lazy evaluation. That was the core reason to launch a new language for smart contracts' developers.</p>
<p>The second reason is: on Plutus platform, GHC compiles the off-chain code, while the Plutus compiler compiles the on-chain code. Third reason is quite obvious: the complexity of Plutus is much lower than that of Haskell.</p>
 6195: <p><strong>There are many reasons</strong>. For example:</p>
<ul>
<li>You need tooling for the communication between the on-chain and the off-chain code and many other tasks.</li>
<li>You need tooling that generates code where the on-chain code is quite specific. You can't use the regular machine code that the Haskell compiler gives you and run it on the blockchain.</li>
<li>With a language so versatile as Haskell, you can write extremely complex code. This is great in some settings, but with smart contracts, it increases the chances of error.</li>
</ul>
<p><strong>Those are some of the issues that you don't have to deal with because of Plutus</strong>:</p>
<ul>
<li>Plutus provides a lot of infrastructure developers would have to create themselves if they'd just use naked Haskell. So it saves effort and makes it easier to develop smart contracts.</li>
<li>It limits the library interfaces available to developers making it straightforward for them to write secure and performant code.</li>
<li>In the blockchain, you want a code format that is designed to be easy to reason about, closely implements the mathematical specification, and allows you to be confident that it's correctly implemented. That's why we have Plutus Core.</li>
</ul>
<p>Sources:</p>
<ul>
<li><a href="https://youtu.be/uZL9SBNfS-0?t=367" rel="nofollow noreferrer">IOHK Language Architect - Manuel Chakravarty Interview</a></li>
<li><a href="https://www.youtube.com/watch?v=xWlUrq0y4JY" rel="nofollow noreferrer">Keynote talk by Manuel Chakravarty: Plutus - Functional Smart Contracts on Cardano</a></li>
</ul>
