| > why cant runSt have the following type:
| >
| > runST All a . (Cxt1..Cxtn) => (All s . ST s a) -> a
|
| It can, and it should. This is how ghc did it from the start. The State in
| Haskell papers didn't consider overloading, so we didn't make this explicit. I
| mentioned it to Mark Jones two years ago, and I thought he had fixed it.
It can't have the stated type because that type doesn't make sense; at
this point in time, there is no way to abstract over a context. The
most general type for runST is:
runST :: (forall s. ST s a) -> a
And, as Alastair pointed out, this is exactly what Hugs 1.3c uses.
All the best,
Mark