Ralf Laemmel wrote:
You did not say anything that's imprecise about "mentioning each other
in a cycle", just the well-known fact that it's not equivalent to total
termination checking (in fact, it's neither fully an overestimate nor
underestimate of termination -- it's just an estimate that's likely to
be right when used in the context of default method definitions).

It's imprecise also in so far that you would need to define what you mean by it.
Does it mean that we focus on the "pattern"

f ... = g ...
g ... = f ...

... or does it include the case

f ... = h g ...
g ... = f ...

yes it does. It also probably includes
f ... = ...
  where _ignored1 = g
g ... = ...
  where _ignored2 = f

Predictability is a good thing, I think

although
class where
  f ... = g ...
  g ... = h ...

h ... = f ...

gets more complicated, but 'h' does have to be defined in the same module or module-cycle, because it refers to the class and the class refers to it


... and that's still very imprecise because the dots don't mean anything proper.

Are you willing to look at the pattern *after* overloading resolution.

good point.  I think GHC can know when it refers to the same instance.


Let's have a proper termination checker!

I think GHC already does, in its strictness analyzer? An incomplete checker of course, because termination checking of Haskell, like of most languages, is undecidable in general.


Btw, obviously a class by itself would not be checked (in terms of the
default methods), but only an instance (with the defaults pulled in).

the class would at most be analyzed to see which were the minimal methods to implement -- it's warnings about instances that we've been talking about, anyway


Isaac
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to