instance inference
Simon Peyton-Jones
simonpj at microsoft.com
Thu Feb 9 05:18:48 EST 2006
Thank you Ross.
I've committed your patch, and added documentation.
Simon
| -----Original Message-----
| From: glasgow-haskell-users-bounces at haskell.org
[mailto:glasgow-haskell-users-
| bounces at haskell.org] On Behalf Of Ross Paterson
| Sent: 06 February 2006 11:36
| To: Simon Peyton-Jones; glasgow-haskell-users at haskell.org
| Subject: Re: instance inference
|
| A patch implementing a relaxed termination constraint is at
|
| http://www.soi.city.ac.uk/~ross/instance-termination.patch
|
| Here is the description:
|
| With -fglasgow-exts but not -fallow-undecidable-instances, GHC 6.4
| requires that instances be of the following form:
|
| (1) each assertion in the context must constrain distinct variables
| mentioned in the head, and
|
| (2) at least one argument of the head must be a non-variable type.
|
| This patch replaces these rules with the requirement that each
| assertion in the context satisfy
|
| (1) no variable has more occurrences in the assertion than in the
| head, and
|
| (2) the assertion has fewer constructors and variables (taken
together
| and counting repetitions) than the head.
|
| This allows all instances permitted by the old rule, plus such
| instances as
|
| instance C a
| instance Show (s a) => Show (Sized s a)
| instance (Eq a, Show b) => C2 a b
| instance C2 Int a => C3 Bool [a]
| instance C2 Int a => C3 [a] b
| instance C4 a a => C4 [a] [a]
|
| but still ensures that under any substitution assertions in the
context
| will be smaller than the head, so context reduction must terminate.
|
| This is probably the best we can do if we consider each instance in
| isolation.
|
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
More information about the Glasgow-haskell-users
mailing list