[Haskell-cafe] Strange error with type classes + associated types

Conal Elliott conal at conal.net
Fri Apr 16 21:00:36 EDT 2010


Hi Brent,

I'm sorry to hear that the non-injectivity issue bit you.  It's bitten me
also at times, leading me to choose associated data types (injective)
instead of associated synonyms (potentially non-injective).  And sometimes,
the data types route is problematic, as the new types aren't instances (and
I don't know how to declare them to be) of other classes when I need them to
be.  MemoTrie & vector-space seem to trip over these issues, and I thought
I'd lucked into a combo that worked, but from your note I guess I just
hadn't pushed far enough to uncover difficulties.

I'm unsure now, but I think I tried making Basis a data type (not syn) and
ran into the problem I mentioned above.  The Basis *synonyms* also have
HasTrie instances, which is crucially important.  If we switch to
(injective) data types, then we lose the HasTrie instances.  I'd be okay
with defining HasTrie instances (preferably via "deriving") for the
associated Basis data types, but I couldn't figure out how to.  Maybe it's
not possible currently, or maybe I just didn't know how.

I'd love to have help exploring these issues more widely & deeply, as they
do seem to fatally wound the usefulness of associated data types.

   - Conal


On Wed, Apr 14, 2010 at 8:01 AM, Brent Yorgey <byorgey at seas.upenn.edu>wrote:

> On Thu, Apr 15, 2010 at 12:48:20AM +1000, Roman Leshchinskiy wrote:
> >
> > >
> > > Right, this seems weird to me.  Why is there still a 'u' mentioned in
> > > the constraints?  Actually, I don't even see why there ought to be
> > > both v and v1.  The type of (*.*) mentions three type variables, u, v,
> and w:
> > >
> > > (*.*)  :: (HasBasis  u, HasTrie  (Basis  u),
> > >           HasBasis  v, HasTrie  (Basis  v),
> > >           VectorSpace  w,
> > >           Scalar  v ~ Scalar  w)
> > >       => (v :-*  w) -> (u :-*  v) -> u :-*  w
> >
> > Note that (:-*) is a type synonym:
> >
> > type :-* u v = MSum (Basis u :->: v)
>
> Aha!  That's what I was missing.  Thanks for the insight, Roman.  I
> guess it's time to go bug Conal... =)
>
> -Brent
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100416/26e22474/attachment.html


More information about the Haskell-Cafe mailing list