scalaz试图使用Heap,如何覆盖折叠功能

时间:2016-12-18 23:44:44

标签: scala scalaz

我有一个案例类:case class Item(id: Long, rank: Int)我想创建一个Item对象堆。我尝试创建Heap[Item]的实例,但我必须覆盖折叠函数,但我不知道该做什么,因此我陷入困境

val heap = new Heap[Item] {
      override def fold[B](empty: => B, nonempty: (Int, (Item, Item) => Boolean, Tree[Ranked[Item]]) => B): B = {

      }
    }

我需要做些什么来完成这项工作,以便我可以使用堆集合; 感谢。

1 个答案:

答案 0 :(得分:3)

您不应该直接致电new Heap开始。

首先,为Order定义隐式Item。例如,按等级排序:

import scalaz._, Scalaz._

case class Item(id: Long, rank: Int)
object Item {
  implicit val order: Order[Item] = Order.orderBy(_.rank)
}

然后使用Heap随播广告对象中的辅助方法创建Heap

Heap.Empty[Item]
Heap.singleton(Item(1L, 1))
Heap.fromData(List(Item(10L, 3), Item(20L, 2), Item(30L, 1)))