Grałem około z ListW.<^>
definicja brzmi następująco:Wpisz pytanie dotyczące wnioskowania za pomocą Scalaz.ListW. <^>
def <^>[B: Zero](f: NonEmptyList[A] => B): B = value match {
case Nil => ∅
case h :: t => f(Scalaz.nel(h, t))
}
nie mogę dowiedzieć się, jak to się stało Option
jest wybrany jako typ Zero
dla tego przykładu
scala> case class CC(v : Int)
defined class CC
scala> val posns = List(CC(2), CC(5), CC(1))
posns: List[CC] = List(CC(2), CC(5), CC(1))
So teraz mam listę tych rzeczy. Moim celem jest odzyskanie Option[CC]
dla min/max posns
, gdzie otrzymam None
dla min, jeśli nie ma wartości poniżej zera i podobnie dla max.
scala> import scalaz._; import Scalaz._
import scalaz._
import Scalaz._
scala> implicit val CCOrder = new Order[CC] {
| def order(v1 : CC, v2 : CC) = orderBy((v : CC) => v.v).order(v1, v2)
| }
CCOrder: java.lang.Object with scalaz.Order[CC] = [email protected]
scala> posns.filter(_.v < 0) <^> (_.min)
res0: Option[CC] = None
scala> posns.filter(_.v > 0) <^> (_.max)
res1: Option[CC] = Some(CC(5))
opcja została dokładnieZero
typ chciałem! Czy ktoś może wyjaśnić, w jaki sposób typer wybiera tyranę? Nie deklaruję tego jako w dowolnym miejscu!
Na początku podać definicję 'MA # max' zamiast' MA # min'. –
Ah. Moje następne pytanie brzmi: "dlaczego" min "pochodzi od" MA ", a nie" Tożsamości "?" –
@alexey: updated. 'x.min (y)' pochodzi od 'Identity',' xs.min' pasuje do 'MA'. – retronym