simonpj at microsoft.com
Thu Feb 9 05:18:48 EST 2006
Thank you Ross.
I've committed your patch, and added documentation.
| -----Original Message-----
| From: glasgow-haskell-users-bounces at haskell.org
| 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
| 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
| 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
| 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
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users at haskell.org
More information about the Glasgow-haskell-users