Abraham Egnor wrote:
However, this solution requires a new wrapper datatype (or at least a
new constructor) to be defined for every typeclass to be used in
Chan-based communication; furthermore, all of the datatypes will be
identical except for the name of the typeclass. It seems like I
should be able to create a type that's parameterized by typeclass,
i.e. something like:
data Wrapper c = forall a. c a = Wrapper a
writer :: Chan (Wrapper Show) - IO ()
...
Ah yes, well that won't work since c is supposed to be a type and Show
is a type class. And if types could be refered to by type classes for
which they have an instance, the problem would be solved!
However I agree that Haskell desparately needs this sort of thing. If I
want to have a list of Showable values that should be allowed.
Moreover I don't even think the programmer should have to wrap it up
inside a Showable data type to use it either. A value such as
[1,hello,(hello,12)] should automatically be allowed, and the type
should be inferred by simply taking the intersection of all of the type
classes for which each element has an instance. Some new syntax might be
required to group several type classes into one type, perhaps. The
type of a several type classes could be something like :Show:Eq: and
:Show:Ord:Num:. That should then be valid to use in the same manner as
any other type (list of, tuples etc.). One exception though! A
type-class-type shouldn't be able to be an instance of a type class
(that could surely lead to some very weird behaviour)!
I'm sure this has been brought up to discussion several times before
though (although I have missed it).
I really do think this should be a standard feature in Haskell. Yes you
can get the same functionality by using existential types, but as the
orignal poster noted it gets tedious very fast, and it's such a common
feature for programming languages that I don't see why Haskell doesn't
have it.
/Sebastian Sylvan
--
Clothes make the man. Naked people have little or no influence on society.
- Mark Twain
___
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell