Doing read/show on existential types would be a lot easier if pattern matching worked *accross* instance declarations and not only within them For example, this code produces an "Ambiguous type variable" GHC error, but it would be really helpful if it didn't: data MyExistantialType=forall v.(Show v)=>EType v class MyExistentialTypeable a where toMyType::String->MyExistantialType instance MyExistentialTypeable String where toMyType "String" = EType "foo" instance MyExistentialTypeable Int where toMyType "Int" = EType "bar" tVal (EType v)=show v main = print $ tVal $ toMyType "String" I know Haskell has a general prohibition on defining functions in multiple locations, but instance declarations already violate it. Why not go all the way? My current approach is manually writing lookup functions in addition to per-instance functions and that is both annoying and error-prone. -Alex- ______________________________________________________________ S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com