[Haskell-cafe] Can a fundep force parametricity
Dan Doel
dan.doel at gmail.com
Tue Nov 2 16:42:37 EDT 2010
On Tuesday 02 November 2010 4:01:33 pm Brandon Moore wrote:
> >instance C Int b where
> >
> > update _ n = n
This instance violates the fundep. The fundep says that the first parameter
determines the second. However, this instance is a scheme for declaring
infinitely many monomorphic instances, like:
C Int Int
C Int Char
C Int ()
...
Which means that the first argument doesn't determine the second in the case
of Int.
I don't really know why undecidable instances allows this. I suppose it's
conceivable that you could have an instance:
instance D x => C Int x
where the constraint on x ensures that it is unique, despite that not being
checkable. In general, though, instances like these would be unsound, except
that fundeps don't refine types eagerly enough to cause that. You can
certainly imagine, though, that the fact that there are instances:
C Int Int
C Int Char
and the fact that the first argument to C determines the second would allow us
to conclude that Int = Char.
-- Dan
More information about the Haskell-Cafe
mailing list