我经常发现自己想要(然后通常编写)其他 Scala 或 Java 库中的类的Scalaz类型类实例。仅举几个例子:
Shapeless的monoid实例几乎免费HList
为您提供具有适当类型成员的案例类的 monoid 实例。
例如, 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.9Promise
(和等)的monad 实例对Promise[Either[Throwable, _]]
各种事情都非常有用。
标准库的应用函子实例Parser
使应用解析更加简洁和优雅。(我刚刚注意到 Scalaz 7现在为 . 提供了一个 monad 实例Parser
。)
等等...
这些实例几乎总是非常通用的,我相信我们很多人都写过很多次。我在这个问题上寻找的是某种用于 Scalaz 类型类实例的聚合器或票据交换所。我不确定这样的东西是否存在——我当然找不到任何类似的东西——但即使只是博客文章、GitHub 存储库或其他资源的链接集合对我来说也是有用的。
我更喜欢 Scalaz 7 实例,但我会尽我所能。