
On Wednesday 23 Jun 2004 2:08 pm, MR K P SCHUPKE wrote:
If I want a let binding I can write one.
The trouble with this is that a sub-optimal (I don't like to use the word "naive") implementation will actually create a new heap construction, rather than re-use the one it knows (or should know) it already has (as a result of pattern matching). This probably isn't a problem with zero arity constructors like [] which AFAIK are universally shared anyway in GHC (and probably other Haskell implementations). Example, if instead of.. f v@(Left s) = <expr> a programmer has to write.. f (Left s) = let v=Left s in <expr> Of course there's no reason in principle why a reasonably smart compiler should optimise out the unnecessary construction AFAICS, and I think last time this was discussed there was talk of doing this with ghc. Dunno if it does though, or about other Haskell implementations. The programmer could help out the less smart compilers a bit by using "as patterns", if it wasn't for the fact that this often results in a type error. Regards -- Adrian Hey