Stefan O'Rear wrote:
On Mon, Jul 09, 2007 at 09:57:14PM +0100, Andrew Coppin wrote:
(BTW... How in the hell do you get symbols like that in plain ASCII??)

You can't, but the most commonly used replacement for ASCII
(Unicode-UTF8) supports them just fine.

Wait... I thought Unicode was still an experimental prototype? Since when does it work in the real world??

Consider the ST monad, which lets you use update-in-place, but is
escapable (unlike IO).  ST actions have the form:

ST s α

Meaning that they return a value of type α, and execute in "thread" s.
All reference types are tagged with the thread, so that actions can only
affect references in their own "thread".

...so *that* is what that thing does...! (I thought it did something quite different.)

Now, the type of the function used to escape ST is:

runST :: ∀ α. (∀ s. ST s α) → α

The action you pass must be universal in s, so inside your action you
don't know what thread, thus you cannot access any other threads, thus
runST is pure.  This is very useful, since it allows you to implement
externally pure things like in-place quicksort, and present them as pure
functions ∀ e. Ord e ⇒ Array e → Array e; without using any unsafe
functions.

...so the 's' doesn't really "exist", it's just random hackery of the type system to implement uniqueness?

But that type of runST is illegal in Haskell-98, because it needs a
universal quantifier *inside* the function-arrow!  In the jargon, that
type has rank 2; haskell 98 types may have rank at most 1.

...kinda wishing I hadn't asked... o_O

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to