Hi, 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 them: 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. http://www.metamilk.com
Albert Lai wrote:
"Brian Hulley"
writes: 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
Perhaps Atom.
Thanks for the suggestion, 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. http://www.metamilk.com
participants (2)
-
Albert Lai -
Brian Hulley