Existential types: want better syntactic support (autoboxing?)

John Meacham john at repetae.net
Mon Jan 30 21:20:53 EST 2006

so if I understand this proposal properly, it would mean the following

every single parameter type class whole parameter is of kind * 
class Foo a where

automatically declares a data type defined as

data Foo = exists a . Foo a => Foo_ a   
(where Foo_ is some internal, non user accessable name)

and an instance

instance Foo Foo where
        method (Foo_ x) = method x 

this all seems quite nice, I really like it, we can always determine
whether a name is a class or type from context (I think the only reason
the namespaces are combined is due to import/export lists)

the only issue is the autoboxing. we can't introduce an actual
constructor because constructors are in a different namespace. so we
would need to automatically turn anything of type Foo a => a into a Foo
when it is used as such.

it should be possible, but the exact changes to typechecking needed
might be subtle..

an alternative might be to just allow existential types in structures so
we can have [exists a . Foo a => a], but that probably has its own can
of worms...


John Meacham - ⑆repetae.net⑆john⑈ 

More information about the Haskell-prime mailing list