[Haskell-cafe] Scope of type variables in associated types

Bertram Felgenhauer bertram.felgenhauer at googlemail.com
Tue May 22 03:16:39 EDT 2007


Matthew Brecknell wrote:
> Bertram Felgenhauer:
> > How does
> > 
> >   class F a where
> >       data B a :: *
> >       data E a :: *
> >       wrap :: B a -> E a
> >       unwrap :: E a -> B a
> > 
> > sound? 'B a' would represent the 'b' in your previous attempt,
> > 
> >   class F a b | a -> b where
> >   ...
> > 
> 
> I'm with Simon in thinking that this code is suspicious.

It wasn't my code Simon was replying to.

> For any given call to "wrap" or "unwrap", how is the compiler supposed
> to determine which instance to use, given that "a" cannot be uniquely
> determined from the type of the function?

As far as my limited understanding goes this should work, because we
are using an associated *data* type here. This means we can't have
instances saying 'type B a = Int', we have to use either a newtype
or a data declaration for that. As a side effect, the compiler can
determine 'a' from 'B a'.

This wouldn't be possible for associated type synonyms, but those
aren't completely implemented yet anyway (again, as far as I know).

Bertram


More information about the Haskell-Cafe mailing list