
Johannes Waldmann wrote:
class ( Show p, ToDoc i, Reader b, ToDoc b, Measure p i b ) => Partial p i b | p i -> b where ... -- (*)
(*) A funny visual aspect of FDs is the absurd syntax. On the left of "|", the whitespace is (type arg) application, but on the right, it suddenly denotes sequencing (tupling)
I think it's fine. The "p i b" on the left is effectively a tuple also. It could be a tuple---i.e. the MPTC syntax could be "Partial (p,i,b)" and it would still make sense. The class declaration syntax is totally screwy anyway. Functional dependencies are constraints, and should be grouped with the typeclass constraints, but instead they're on opposite sides of the head. Plus the => implication is backwards. And the method declarations are also constraints. We oughta have class Partial p i b where Foo p (p,i) -> b grok :: p -> i -> b or class Partial p i b | Foo p, p i -> b where grok :: p -> i -> b or something. But I'm not proposing anything of the sort. I'm in favor of standardizing the syntax we've got. Syntax changes are disruptive, and I don't think they're justified unless they free useful syntax for another use, which this wouldn't. -- Ben