[Haskell-cafe] A type in search of a name...

Brian Hulley brianh at metamilk.com
Tue Oct 10 10:51:56 EDT 2006

You'll never believe it but I've been struggling last night and all of today 
to try and think up a name for the following type and I'm still nowhere near 
a solution:

    data ??? = VarId | VarSym | ConId | ConSym

this is part of a type to describe Haskell lexemes:

    data Token = TName !??? !ByteString.T | ...

Here are some of my attempts to fill in ??? and my reasons for rejecting 

1) VarConIdSym - the problem is that it's too long and the first letter is 
'v' which could be confused with the letter 'V' in "VarId" or "VarSym"

2) Name - the problem is that this suggests the string itself rather than 
the VarId/VarSym/ConId/ConSym'ness of the token

3) NameType - I'm trying to avoid using the words "Type" "Kind" etc because 
I'll probably want to use these later for other things and in any case 
NameType suggests the type of a lexical name ie Token itself

4) Space - this can be confused with something to represent whitespace or 
the namespaces introduced by modules

5) Just using data Token = TVarId !BS.T | TVarSym !BS.T | ... -- explodes 
into too many different cases when you add tokens for qualified names and 
all their variations (since I'm also representing incomplete tokens like 
"Foo." and "Foo.where" (as a prefix of "Foo.whereas" etc since it can't 
stand by itself because "where" is a reserved word))

6) Using Bool as in data Token = TName !Bool !Bool !BS.T -- problem is that 
then I won't get any help from the typechecker if I accidentally confuse the 
order of Bools when matching etc. I could use the record syntax but then 
code can become very clunky to look at and it would still allow the Bools to 
get confused when they are passed about

Any ideas? I must say that trying to think up names for things is absolutely 
the most difficult task in programming imho. The problem is that once fixed 
down, a name gets used all over the place and becomes totally entrenched in 
the code and affects how one thinks about the code thereby influencing its 
whole future development in a very deep and pervasive way (think suffixes/ 
prefixes/ relationships with other concepts etc).

I would also be satisfied with just good names for the following types:

    data ???1 = Var | Con
    data ???2 = Id | Sym
    data ???3 = Op | Plain

(I just combined ???1 and ???2 in ??? to try and save some space in the 
representation but ideally they would be separate types if only there were a 
way to tell the compiler to represent each by 1 bit in a word at the machine 
level like C's struct {VarCon vc : 1; IdSym is : 1;})

Any suggestions welcome,
Thanks, Brian.
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.


More information about the Haskell-Cafe mailing list