Daniel Fischer <daniel.is.fisc...@web.de> writes: >> An important point of a powerful type system is to model your program so >> that only sensible code is legal.
> That would be an awesomely powerful type system :) Heh. But while we're waiting for it, we can try to use what we got to eliminate as much non-sensical code as possible. (Which, btw, I think is an under-sold point: people used to C-style type systems think that all the type system does is label variables for you, which dynamic type systems (like our algebraic data types) let you do the same run-time. But you get a lot more mileage by careful type design.) >> I don't think there would be any doubt what 'deleteBy (<= 5) [1..10]' >> would do. > > Well, if you don't know about filter, you could think it deletes all > elements satisfying the predicate, but apart from that, it's clear. I'd probably call it 'filter1', but that's just my personal convention. >> And I just don't see what the requirement for an equivalence >> relation buys you. > For the type deleteBy has, predictability. Currently, you can't know > whether deleteBy pred x tests pred x y or pred y x without looking at the > source. ...which is a worry my implementation removed by letting the user decide through partial application. > For a symmetric relation, you needn't care. But the docs (are interpreted to) say equivalence relation, so woe betide you if you give it a symmetric but non-transitive or non-reflexive function! deleteBy (\x y -> abs (x-y) == 2) 5 [1..5] Anyway: I guess the point here is that if all 'deleteBy f x ys' does with arguments f and x is apply f to x and then use the result, we might as well feed it that result and eliminate a lot of uncertainity as well as some documentation all too few of us bother to read. -k -- If I haven't seen further, it is by standing in the footprints of giants _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe