
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
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.