instance inference

Ross Paterson ross at soi.city.ac.uk
Mon Feb 6 06:35:40 EST 2006


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.



More information about the Glasgow-haskell-users mailing list