[Haskell-cafe] Re: how would this be done? type
brianh at metamilk.com
Fri Mar 17 11:57:30 EST 2006
Ben Rudiak-Gould wrote:
> Matthias Fischmann wrote:
>> now i want to create a list of a type similar to
>> [r1, r2, r3] :: (Resource a) => [a]
>> but with r1 being pizza, r2 being crude oil, and so on.
> The type you actually want here is [exists a. (Resource a) && a], but
> no Haskell implementation supports that.
Is there a reason for using && instead of
[exists a. Resource a=>a]
Also, am I right in thinking that the reason why no implementation supports
this is as follows:
a) A value 'v' of type 'exists a. Resource a=>a 'would have to be internally
represented as something like (dictResource_t, value_t)
b) Given such a value, there is no syntactic way to distinguish the pair
from the value_t stored inside it, unlike the use of 'forall' where the
syntax for the constructor conveniently "represents" any dictionaries that
have been glued onto the value (ie pattern matching against R x gives us
back the dictionaries "R" and the plain value x)?
Hope I'm not making this more confusing but I'm still trying to get my head
around all these invisible happenings regarding dictionaries so I can
visualise what's happening in terms of bytes and pointers in the runtime....
More information about the Haskell-Cafe