Tra*_*own 13 java monads scala typeclass scalaz
我经常发现自己想要(然后通常编写)Scalaz类型的类实例用于其他Scala或Java库中的类.举几个例子:
Shapeless的一个monoid实例为HList你提供了monoid实例,用于几乎免费提供适当类型成员的case类.
对于适用函子例如电梯的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))
Run Code Online (Sandbox Code Playgroud)
对于单子例如派遣0.9的Promise(和Promise[Either[Throwable, _]]等)是对各种事情巨大有用.
一个适用函子实例为标准库的Parser品牌应用性解析更加简洁和优雅.(我只是注意到Scalaz 7 现在提供了一个monad实例Parser.)
等等...
这些实例几乎总是非常通用的,我相信很多人已经写了很多次.我正在捕获的这个问题是Scalaz类型类实例的某种聚合器或交换所.我不确定这样的事情是否存在 - 我当然无法找到类似的东西 - 但即使只是一组链接到博客文章,GitHub存储库或其他资源对我也很有用.
我更喜欢Scalaz 7实例,但我会采取任何我能得到的.