Yo estaba jugando con ListW.<^>
, cuya definición es la siguiente:Escriba la pregunta de inferencia utilizando Scalaz.ListW. <^>
def <^>[B: Zero](f: NonEmptyList[A] => B): B = value match {
case Nil => ∅
case h :: t => f(Scalaz.nel(h, t))
}
no puedo averiguar cómo es que Option
está siendo elegido como el tipo Zero
para este ejemplo
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))
Así ahora tengo una lista de estas cosas. Mi objetivo es obtener un Option[CC]
para el mínimo/máximo de posns
donde obtengo un None
por minuto si no hay valores por debajo de cero y similares para máx.
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))
opción era exactamente el tipo Zero
que quería! ¿Alguien puede explicar cómo el typer ha elegido Option
? No lo declaro en cualquier parte!
Al principio, le dan la definición de 'MA # max' en lugar de' MA # min'. –
Ah. Entonces mi próxima pregunta será: "¿por qué' min' viene de 'MA' y no de' Identity'? " –
@alexey: actualizado. 'x.min (y)' proviene de 'Identity',' xs.min' coincide con 'MA'. – retronym