Tôi đang chơi xung quanh với ListW.<^>
, định nghĩa của nó là như sau:Nhập câu hỏi suy luận bằng Scalaz.ListW. <^>
def <^>[B: Zero](f: NonEmptyList[A] => B): B = value match {
case Nil => ∅
case h :: t => f(Scalaz.nel(h, t))
}
tôi không thể tìm ra cách đi Option
đang được chọn là loại Zero
ví dụ này
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))
Vì vậy, bây giờ tôi có một danh sách những điều này. Mục tiêu của tôi là lấy lại số Option[CC]
cho tối thiểu/tối đa là posns
nơi tôi nhận được None
cho tối thiểu nếu không có giá trị nào dưới 0 và tương tự cho giá thầu CPC
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))
Lựa chọn là chính xác loại Zero
tôi muốn! Bất cứ ai có thể giải thích làm thế nào đến Option
đang được lựa chọn bởi các typer? Tôi không khai báo nó ở bất cứ đâu!
Khi bắt đầu, bạn cho định nghĩa của 'MA # max' thay vì' # min' MA. –
Ah. Vì vậy, câu hỏi tiếp theo của tôi sẽ là - "tại sao' min' đến từ 'MA' và không phải là 'Identity'?" –
@alexey: đã cập nhật. 'x.min (y)' xuất phát từ 'Identity',' xs.min' khớp với 'MA'. – retronym