[Haskell-cafe] Class constraints with "free" type variables and fundeps

Francesco Mazzoli f at mazzo.li
Sat Sep 29 11:50:08 CEST 2012


At Sat, 29 Sep 2012 10:56:29 +0200,
Francesco Mazzoli wrote:
> 
> At Sat, 29 Sep 2012 10:30:07 +0200,
> Francesco Mazzoli wrote:
> > Then I'd also like to have
> > 
> >     newtype TST sym algo = <...>
> > 
> >     instance (Ord sym, ListLike full sym) => Search (TST sym algo) full algo
> > 
> > This one is a different problem - it requires UndecidableInstances and I don't
> > understand why.  It seems to me that the coverage condition
> > (<http://www.haskell.org/ghc/docs/latest/html/users_guide/type-class-extensions.html>,
> > point 7.6.3.2) is too strict in these cases.  But this is not that important.
> 
> This doesn't make sense with the code posted (which would require sensibly
> UndecidableInstances), I meant something like this (I don't have "actual" code
> to show the problem):
> 
>     data Foo a
> 
>     class Bar a b | a -> b
> 
>     class Quux a b | a -> b
> 
>     instance Bar a b => Quux (Foo a) b

Actually I know why this is the case - instances are picked without looking at
the constraints, and there is no backtracking.  I guess my brain just can't
resist from seeing Prolog in type classes...

--
Francesco * Often in error, never in doubt



More information about the Haskell-Cafe mailing list