
On Wed, 8 Nov 2006, Nils Anders Danielsson wrote:
On Wed, 08 Nov 2006, "Arie Peterson"
wrote: Specifying precedence 'lazily', by a partial order, does not suffer from this problem, because it only requires you to make local decisions.
Assuming we only want to be able to make local decisions.
Let's say that we want == to bind less tightly than +, as it is now. Let's also say that Eq and Num are defined in two different _unrelated_ modules (this of course implies that Eq is not a superclass of Num). Where and how would we specify the relation between these two operators?
Depends on what we consider being more special. * Does addition require comparison? Not in Haskell. However, the recursive implementation of addition for Peano numbers need equality check. * Provide all additive types comparison? No. * Does comparison require addition? No. So, these concepts seem to be unrelated at first. If the Prelude would be splitted into modules, where (==) and (+) are separated, and no module imports the other one, then we need a third module, which states the relation between (==) and (+). If I have missed something, and say (+)'s module imports (==)'s one, then (+)'s module should define the relation.