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