
On Tuesday 08 March 2011 00:58:36, Alexander Solla wrote:
As a matter of fact, if you read GHC.Prim, you will see that seq is a bottom!
No, you don't. GHC.Prim is a dummy module whose only purpose is to let haddock generate documentation. Every function there has the code let x = x in x, e.g. plusWord# :: Word# -> Word# -> Word# plusWord# = let x = x in x minusWord# :: Word# -> Word# -> Word# minusWord# = let x = x in x undefined is not yet available, otherwise probably everything in GHC.Prim would be pseudo-defined as undefined for haddock.
seq :: a -> b -> b seq = let x = x in x
The "magic" semantics of evaluating the first argument are done by the compiler/runtime, and are apparently not expressible in Haskell.
Right. But neither is addition of Word# etc., for the primitives, you have to do something special.
This is true of inline lazy unsafeCoerce
and dozens of others, all of which are expressed as specialized types with the same equation: let x = x in x