我经常发现自己需要(然后通常是编写) 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的applicative functor instance使应用型解析更简洁、更优雅。(我刚刚注意到Scalaz7now provides a monad instance for Parser。)
以此类推。
这些实例几乎总是非常通用的,我相信我们中的很多人都写过很多这样的代码。我在这个问题中寻找的是Scalaz类型类实例的某种聚合器或交换所。我不确定是否存在这样的东西-我肯定找不到任何类似的东西-但即使是博客帖子、GitHub存储库或其他资源的链接的集合也会对我有用。
我更喜欢Scalaz 7实例,但是我会选择我能得到的任何东西。
发布于 2012-09-15 03:58:27
Scalaz实例的社区维基
Scalaz 7实例
https://stackoverflow.com/questions/12426269
复制相似问题