Ross Paterson skrev:
On Fri, Jan 22, 2010 at 12:24:37PM +0100, Emil Axelsson wrote:
Consider the following program:
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
class B a => A a
instance A Int
class Eq a => B a
instance (A a, Eq a) => B a
[...]
Although I don't know all the details of the class system, it seems
unintuitive that I can make a program non-terminating just by
changing the context of a function (regardless of
UndecidableInstances etc.).
Is this a bug or a feature?
I'm afraid you voided the warranty when you used UndecidableInstances.
You really do have a circularity between A and B here, so it's not
surprising that you get a loop. By changing the context, you demanded
more instances, undecidable ones in fact.
But still, I've always heard that "undecidable instances can cause the
type checker to loop, but if the compiler terminates, you're fine". Here
the loop happens at run time, so undecidable instances must be a little
more evil than I thought...
/ Emil
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe