On Fri, Jul 18, 2003 at 11:39:48AM +1000, Andrew J Bromage wrote: > > Someone mentioned multiplying by a scalar. I think this is a > > good application, but what we need is to agree (somehow) on > > the symbol used. I've used (*.) and (.*), with the dot being > > on the side the scalar is on (on the grounds that . is a > > scalar product elsewhere), but without wide agreement I > > agree that this sort of thing reduces readability, because > > while I can read these programmes, it's harder for everyone > > else. > > Yuck. :-)
What's wrong with that solution? You might hope for something better, but it seems like it would work for, e.g., your situation below. Here are my concrete suggestions, using a variant of this notation; however, I mark the side that does _not_ have the scalar, on the grounds that scalar * scalar should be the original operator, and use '*>' or '<*' to do it. > I've run into the same problem with affine algebra, which has two > types, the Point and the Vector, where a Vector is the difference > between two Points: > > Vector + Vector = Vector v1 + v2 = v3 > Vector + Point = Point v1 +> p1 = p2 > Point + Vector = Point p1 <+ v1 = p2 > Point + Point is an error > > Vector - Vector = Vector v1 - v2 = v3 > Point - Vector = Point p1 <- v1 = p2 > Vector - Point = Point -- (this rule is a bit controversial) This one is obviously an error. Add Point to both sides to get the error that you noted above. > Point - Point = Vector p1 <-> p2 = v1 The other potential solution is to use an 'Additive' class class Additive a b c | a b -> c, c a -> b, c b -> a where (+) :: a -> b -> c class (Additive c b a) => Subtractive a b c where (-) :: a -> b -> c > One solution might be to relax the rules about how the types of > operators are resolved. At the moment, you can define function > names from different modules and all you need to do is qualify > them when you use them. It's a little odd that you can't do > something similar with operators, though no succinct syntax leaps > to mind. But you can use qualified names for operators! It just looks incredibly ugly. But you could write, say, 1 Float.+ 2 Peace, Dylan
pgp00000.pgp
Description: PGP signature