Yan*_*san 4 scala implicit-conversion scalaz
我怎样才能找到所有的实例Monoid.例如,如何知道scalaz中是否有Monoid实例Map?如果是的话,它在源代码中的位置.我试过以下没有成功
@ implicitly[Monoid[Map[_, _]]]
Main.scala:1146: could not find implicit value for parameter e: scalaz.Monoid[Map[_, _]]
implicitly[Monoid[Map[_, _]]]
^
Compilation Failed
Run Code Online (Sandbox Code Playgroud)当我从REPL执行代码时,我怎么能看到会发生什么(隐式转换......)
Map("a", 1) |+| Map("a", 1)
Run Code Online (Sandbox Code Playgroud)无法找到类型类的所有实例.
具体来说,Map它取决于值的类型,因为Map[K, V]monoid实例需要一个Semigroup[V]实例.
你可以找到Map's Monoidin 的代码scalaz.std.map.
您可以使用反射查看隐式转换:
import scalaz.std.map._
import scalaz.std.anyVal._
import scalaz.syntax.semigroup._
import scala.reflect.runtime.universe._
showCode(reify { Map("a" -> 1) |+| Map("a" -> 1) }.tree)
// `package`.monoid.ToSemigroupOps(
// Predef.Map.apply(Predef.ArrowAssoc("a").->(1)))
// (map.mapMonoid(Predef.this.DummyImplicit.dummyImplicit, anyVal.intInstance))
// .|+|(Predef.Map.apply(Predef.ArrowAssoc("a").->(1)))
Run Code Online (Sandbox Code Playgroud)
Scalaz在工作中的含义是:
ToSemigroupOps要添加|+|操作的语法转换Map.Monoid实例Map[String, Int]的Semigroup[Int]实例.| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |