| Hugs treats runST as a keyword.

But I think Graeme's point is that Hugs doesn't actually treat it like
other keywords.  If you try

   :i where class let

then you get an error.  But if you do the same with runST, then Hugs
seems to treat it as a regular identifier, albeit with an unknown type.
The same things happen with :n.  These two commands bypass the lexer,
and hence don't distinguish between keywords and regular identifiers.
They rely, instead, on the fact that a user will never be able to define
an identifier with the same name as a keyword, and hence the symbol
table lookup will fail.

I think Hugs is defining the primitive used to implement runST with the
name "runST", which users of the :n and :i commands can find in the
symbol table.  We should change the name of the primitive to prevent
this.  Anything that's not a legal identifier would do, like "_runST",
for example.

Mark

Reply via email to