2014-09-21 5 views
3

Чтение http://eed3si9n.com/learning-scalaz/Order.html этот пример дан:Каково использование этого случая scalaz.Ordering?

scala> 1.0 ?|? 2.0 
res10: scalaz.Ordering = LT 

Все, что указано в связи с упорядочением:

"

scala> 1 > 2.0 
res8: Boolean = false 

scala> 1 gt 2.0 
<console>:14: error: could not find implicit value for parameter F0: scalaz.Order[Any] 
       1 gt 2.0 
      ^

scala> 1.0 ?|? 2.0 
res10: scalaz.Ordering = LT 

scala> 1.0 max 2.0 
res11: Double = 2.0 

Order enables ?|? syntax which returns Ordering: LT, GT, and EQ. It also enables lt, gt, lte, gte, min, and max operators by declaring order method. Similar to Equal, comparing Int and Doubl fails compilation. 

"

Какое значение scalaz. Заказ в этом случае?

1.0 max 2.0 использует стандартный метод Scala API max и не относится к scalaz?

ответ

4

Scalaz does provide this syntax для вещей с экземпляром Order. В этом случае вы правы, что 1.0 max 2.0 будет использовать max из стандартной библиотеки, тем не менее, поскольку он более конкретный (как вы можете быстро подтвердить, включив режим питания с :power в REPL, а затем введя что-то вроде settings.processArgumentString("-print typer")).

Лучшим примером в данном случае будет some(2.0) max some(1.0), так как стандартная библиотека не предоставляет max для Option[Double], что скроет Scalaz's.

+0

спасибо за пример «какой-то (2.0) макс некоторых (1,0)», очень полезный –

+1

я только что открыл вопрос https://github.com/eed3si9n/learning-scalaz/issues/9 –

Смежные вопросы