我经常发现自己想要(然后通常编写)Scalaz类型的类实例用于其他Scala或Java库中的类。举几个例子:
Shapeless的HList
的monoid实例几乎免费为您提供monoid instances for case classes with appropriately typed members。
Lift的Box
的应用仿函数实例允许您对一系列框进行排序:
scala> val boxen: List[Box[Int]] = Full(1) :: Full(2) :: Full(3) :: Nil
boxen: List[net.liftweb.common.Box[Int]] = List(Full(1), Full(2), Full(3))
scala> boxen.sequence
res0: net.liftweb.common.Box[List[Int]] = Full(List(1, 2, 3))
Dispatch 0.9的Promise
(以及Promise[Either[Throwable, _]]
等)的monad实例对各种事物都非常有用。
标准库Parser
的{{3}}使得应用解析更加简洁和优雅。 (我刚注意到Scalaz 7 applicative functor instance。)
等等......
这些实例几乎总是非常通用的,我相信很多人已经写了很多次。我正在为这个问题捕获的是Scalaz类型类实例的某种聚合器或交换所。我不确定这样的事情是否存在 - 我当然无法找到类似的东西 - 但即使只是一组链接到博客文章,GitHub存储库或其他资源对我也很有用。
我更喜欢Scalaz 7实例,但我会采取任何我能得到的。
答案 0 :(得分:5)