On 23 February 2006 01:48, John Meacham wrote: > On Wed, Feb 22, 2006 at 05:11:26PM -0000, Simon Marlow wrote: >> Indeed, the distinction between data & newtype should be a completely >> private property, so we certainly shouldn't distinguish those in >> exports/imports. It's less clear to me whether type and data/newtype >> should be distinguished or not, which is why I asked the question. >> I'm not sure I agree with John's answer, I'd rather just say 'type' >> or 'data', using 'data' for both data and newtype, like Haddock does. > > my best argument against this is to try to compile the following under > ghc in strict haskell 98 mode > >> class Foo a >> instance Foo IOError > > oops!
Actually I wanted to distinguish type and data, and type and newtype, but not data and newtype (my lanugage was ambiguous, sorry about that). > Even if the restriction on synonyms in instance heads is lifted, being > able to use type synonyms to give true aliases for types is important > part of writing interfaces that can evolve and encapsulating > implementation details. > > But more importantly, The haskell module system has a nice philosophy > of just being about controlling the namespace of what is in scope in a > module. Conflating representation details with it would just confuse > things. I'd say use 'type' for everything in the type namespace, class > for everything in the class namespace, value (or nothing) for things > in the value namespace and so forth. We want the module system to > describe precicely what names are in scope and what entities names in > a module map too, nothing more. It is also a much simpler set of > rules to remember and much more straightforward to specify. That's a fair point. I agree it's a nice property that the module system just talks about *names* and nothing else, and on that basis you're right that distinguishing type synonyms from other type constructors in export specifiers would be inconsistent. Cheers, Simon _______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://haskell.org/mailman/listinfo/haskell-prime