[Template-haskell] Namespaces
Simon Peyton-Jones
simonpj at microsoft.com
Wed Nov 19 09:07:03 EST 2003
Template Haskellers
Consider this
reify (mkName "T")
Do we get the data constructor T or the type constructor T? For
in-scope top-level things we can say
reify 'T
reify ''T
to distinguish, but currently there's no way to distinguish for
dynamically scoped names built with mkName.
Clearly a global Name, one made by 'T or ''T, keeps track of its own
name space. An obvious possibility would be to make all Names do so.
So then one would have
mkVName :: String -> Name -- variables and data
constructors
mkTName :: String -> Name -- types, classes, and type
variables
Dually, one could have name-space predicates
isVarName, isDcName, isTcName, isTvName :: Name -> Bool
which said if a Name described a variable, datacon, tycoon, tyvar
repectively. (mkVName would use the capitalisation convention to decide
whether the Name was a datacon or a variable; similarly mkTName.)
One advantage of this is that we could get rid of the VarE/ConE
distinction, and the VarT/ConT distinction, which would be quite
worthwhile, I think. And it would fix the problem I started this
message with.
But it would mean that the (hopefully few) mkName calls would need to
change to mkVName and mkTName.
I'm inclined to do this. Any comments?
Simon
More information about the template-haskell
mailing list