termination for FDs and ATs

Ross Paterson ross at soi.city.ac.uk
Wed May 3 04:36:33 EDT 2006

On Tue, May 02, 2006 at 12:26:48AM +0100, Ross Paterson wrote:
> So the MR raises the reverse
> question: can you be sure that every tautologous constraint is reducible?

I think the answer is no.  Consider:

	class C a where
		type Result a
		method :: a -> Result a

	instance C (Maybe a) where {
		type Result (Maybe a) = Bool

	f = \ b x -> if b then Just (method x) else x

The AT algorithm will stop after inferring the following type for f:

	(a = Maybe (Result a), C a) => Bool -> a -> a

Since the constraint set is non-empty, this definition will be rejected
by the monomorphism restriction.

However, this constraint set has exactly the same set of solutions as
a = Maybe Bool, which is trivially solvable.  (The corresponding FD
version will reduce to this, thanks to instance improvement.)

More information about the Haskell-prime mailing list