On 1/4/06, Jonathan Lang <[EMAIL PROTECTED]> wrote: > > And I'm almost sure that I agree with him. It's too bad, because > > except for that little "detail", fmap was looking pretty darn nice for > > junctions. > > Not really. If I read the fmap proposal correctly,
You didn't :-) > if any($x, $y, $z) »==« any(1, 2, 3) {...} > > would do the same thing as > > if $x == 1 || $y == 2 || $z == 3 {...} The key point is that >>==<< just threads == through the (binary in this case) functor, and it's up to the functor to decide what that means. For lists: (1,2) >>+<< (3,4) === (4,6) But for junctions: 1|2 >>+<< 3|4 === 4|5|5|6 === 4|5|6 The thing that makes lists "zip-thread" is the definition the Functor{List} instance, not anything fundamental about functors. > Side note: "any(1, 2, 3)" is indistinguishable from "one(1, 2, 3)", > because the values 1, 2, and 3 are mutually exclusive. That's only true when you're thinking about equality: 1 < any(1,2,3) # true 1 < one(1,2,3) # false (1 < 2 and 1 < 3) People often > use the inclusive disjunction when they mean the exclusive one, and > get away with it only because the values that they're dealing with are > mutually exclusive. Another issue is that one-junctions conceptually > represent a single value at a time - though which one is unknowable - Junctions are frightfully more abstract than that. They only take on meaning when you evaluate them in boolean context. Before that, they represent only a potential to become a boolean test. You could think of them like an "operator voltage": a comparison divided by the operator and one of the operands. Luke