[Haskell] concurrent haskell, higher-order types and parameterizing by typeclass

Sebastian Sylvan sylvan at dtek.chalmers.se
Wed Apr 14 01:28:05 EDT 2004



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


More information about the Haskell mailing list