
At 12:25 PM -0400 4/25/04, Mark Carroll wrote:
I keep running into annoyance in having to name data constructors differently if they're for different types if they're in the same module or something. I wish that something like some Type.Constructor syntax worked in order to disambiguate. Or, better still, I have that problem with function names too (e.g. Data.List.union, Data.Set.union, IIRC) and it occurs to me that a lot of this can be resolved automatically because the types only make sense with one of the choices.
I'm not really proposing any changes; more, I'm wondering what others' thinking is about this sort of thing - what annoys them, how they get around it, etc.
The nonreusability of function and constructor names comes (AFAIK) from the need to infer types in the absence of type declarations. For example, if we have types data A = X Int | Y String data B = X Float | Y String then it's not possible to determine whether f as defined by these equations f (X x) = X (x+3) f (Y s) = Y (reverse s) has type A -> A or B -> B, and thus whether the type of that (+) is Int -> Int -> Int or Float -> Float -> Float. So, in order to preserve type inference in the absence of type declarations, we put up with the nuisance of name collisions. Whether the payoff is worth the price is open to question. It seems to be widely agreed that although type declarations aren't strictly necessary, they're nevertheless highly advisable as aids to the human reader --as verified comments, if you will. In this respect the Standard Prelude sets an excellent example. If our code is going to include type declarations anyway, couldn't a type checker use them to resolve ambiguities created by reuse of names? Continuing the example, declaring f :: A->A removes the ambiguity. If this capability were added to some future version of Haskell, programmers would be required to declare functions' types only when they want to reuse names of constructors and other functions. Of course, if thisd idea is all wet because I'm missing something, I'll be most grateful to be enlightened. Regards to all, --Ham -- ------------------------------------------------------------------ Hamilton Richards, PhD Department of Computer Sciences Senior Lecturer The University of Texas at Austin 512-471-9525 1 University Station C0500 Taylor Hall 5.138 Austin, Texas 78712-0233 ham@cs.utexas.edu hrichrds@swbell.net ------------------------------------------------------------------