I generally use the Typeable class for this.  In that example, you'd want:

class Typeable a => Shape_ a

instead of just

class Shape_ a

and then your filter predicate would look like:

isSquare :: Shape -> Bool
isSquare (Shape s) = typeOf s == typeOf square
  where square :: Square ; square = undefined

(warning: I didn't try this code.)

That adds a little overhead (particularly in that everything must now
derive Typeable) but is one of the better solutions I've seen.

/g

On 12/5/06, Creighton Hogg <[EMAIL PROTECTED]> wrote:
Hi Haskell-ers,
So I think I understand the idea of creating a heterogenous list using
typeclasses and existentials, but I don't see how to filter the list
to retrieve elements of the list that are of only one type.

More concretely, taking the example here how could we take a list of shapes
[Shape] and pull out all objects that are Squares?
I don't see an obvious way this makes sense.
Is there a way of doing heterogenous lists that would make this possible?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe





--
It is myself I have never met, whose face is pasted on the underside of my mind.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to