@@ -115,9 +115,7 @@ trait Order[@sp A] extends Any with PartialOrder[A] { self =>
115115 * instance.
116116 */
117117 def toOrdering : Ordering [A ] =
118- new Ordering [A ] {
119- def compare (x : A , y : A ): Int = self.compare(x, y)
120- }
118+ compare(_, _)
121119}
122120
123121abstract class OrderFunctions [O [T ] <: Order [T ]] extends PartialOrderFunctions [O ] {
@@ -158,17 +156,13 @@ object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
158156 * function `f`.
159157 */
160158 def by [@ sp A , @ sp B ](f : A => B )(implicit ev : Order [B ]): Order [A ] =
161- new Order [A ] {
162- def compare (x : A , y : A ): Int = ev.compare(f(x), f(y))
163- }
159+ from((x, y) => ev.compare(f(x), f(y)))
164160
165161 /**
166162 * Defines an ordering on `A` from the given order such that all arrows switch direction.
167163 */
168164 def reverse [@ sp A ](order : Order [A ]): Order [A ] =
169- new Order [A ] {
170- def compare (x : A , y : A ): Int = order.compare(y, x)
171- }
165+ from((x, y) => order.compare(y, x))
172166
173167 /**
174168 * Returns a new `Order[A]` instance that first compares by the first
@@ -178,21 +172,17 @@ object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
178172 * then (if two elements are equal) falls back to `y` for the comparison.
179173 */
180174 def whenEqual [@ sp A ](first : Order [A ], second : Order [A ]): Order [A ] =
181- new Order [A ] {
182- def compare (x : A , y : A ) = {
183- val c = first.compare(x, y)
184- if (c == 0 ) second.compare(x, y)
185- else c
186- }
175+ from { (x, y) =>
176+ val c = first.compare(x, y)
177+ if (c == 0 ) second.compare(x, y)
178+ else c
187179 }
188180
189181 /**
190182 * Define an `Order[A]` using the given function `f`.
191183 */
192184 def from [@ sp A ](f : (A , A ) => Int ): Order [A ] =
193- new Order [A ] {
194- def compare (x : A , y : A ) = f(x, y)
195- }
185+ f(_, _)
196186
197187 /**
198188 * Define an `Order[A]` using the given 'less than' function `f`.
@@ -215,9 +205,7 @@ object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
215205 * An `Order` instance that considers all `A` instances to be equal.
216206 */
217207 def allEqual [A ]: Order [A ] =
218- new Order [A ] {
219- def compare (x : A , y : A ): Int = 0
220- }
208+ from((_, _) => 0 )
221209
222210 /**
223211 * A `Monoid[Order[A]]` can be generated for all `A` with the following
@@ -248,8 +236,5 @@ object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
248236 }
249237
250238 def fromComparable [A <: Comparable [A ]]: Order [A ] =
251- new Order [A ] {
252- override def compare (x : A , y : A ): Int =
253- x.compareTo(y)
254- }
239+ from(_ compareTo _)
255240}
0 commit comments