On 1 May 2015 at 15:30, Matt Oliveri <atma...@gmail.com> wrote: > > Bull crap. As you said yourself, with coherent typeclasses, you may > want alternatives that take an explicit comparison function. So with > coherent typeclasses, you certainly want first-class functions too. > Since typeclasses generally require passing dictionaries, you already > effectively have first-class functions anyway, whether you like it or > not. But really, who wants to get rid of first-class functions? No > one. So don't write flame bait. >
This seems a bit of an over-reaction. My point was nobody is arguing to get rid of first-class functions, which allow you to pass in ordering operators, so why would you not want implicits where you can have one definition for both ways of doing things. > The one and only problem with instance arguments, I gather, is that > instances are not guaranteed to be coherent. I don't see this at all. Instances available for implicit resolution have to be coherent., however you could still pass explicit instances. The way I have looked at this is that a type-class and a record are really the same thing with different resolution: data Ord a = Ord { cmp :: a -> a -> Bool } ord1 = Ord { cmp = > } :: Ord Int ord2 = Ord { cmp = < } :: Ord Int -- everything is fine so far and we can call sort: sort ord1 [3, 1, 2] -- we can select which instance is to be used as-if it were a type-class: use ord1 -- then we can call sort [3, 1, 2] -- if we want to enforce global coherence the following would result in a compile error use ord2 Keean.
_______________________________________________ bitc-dev mailing list bitc-dev@coyotos.org http://www.coyotos.org/mailman/listinfo/bitc-dev