[Haskell] pattern matching accross instance declarations

S. Alexander Jacobson alex at alexjacobson.com
Wed Dec 1 18:44:05 EST 2004


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


More information about the Haskell mailing list