如何找出在 scalaz 中将 Monoid 用于 Map 时会发生什么
How to find out what happens when I use Monoid for Map in scalaz
如何找到 Monoid
的所有实例。例如,如何知道 scalaz 中是否存在 Map
的 Monoid
实例?
如果是,它在源代码中的位置。
我尝试了以下但没有成功
@ implicitly[Monoid[Map[_, _]]]
Main.scala:1146: could not find implicit value for parameter e: scalaz.Monoid[Map[_, _]]
implicitly[Monoid[Map[_, _]]]
^
Compilation Failed
当我从 REPL 执行代码时,如何查看发生了什么(隐式转换,...),例如
Map("a", 1) |+| Map("a", 1)
无法找到类型 class 的所有实例。
特别是 Map
它取决于值的类型,因为 Map[K, V]
幺半群实例需要 Semigroup[V]
实例。
您可以在 scalaz.std.map
.
中找到 Map
的 Monoid
的代码
你可以看到使用反射的隐式转换:
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)))
工作中的 Scalaz 隐式是:
- 语法转换
ToSemigroupOps
将|+|
操作添加到Map
。
Map[String, Int]
的 Monoid
实例使用 Semigroup[Int]
实例。
如何找到
Monoid
的所有实例。例如,如何知道 scalaz 中是否存在Map
的Monoid
实例? 如果是,它在源代码中的位置。 我尝试了以下但没有成功@ implicitly[Monoid[Map[_, _]]] Main.scala:1146: could not find implicit value for parameter e: scalaz.Monoid[Map[_, _]] implicitly[Monoid[Map[_, _]]] ^ Compilation Failed
当我从 REPL 执行代码时,如何查看发生了什么(隐式转换,...),例如
Map("a", 1) |+| Map("a", 1)
无法找到类型 class 的所有实例。
特别是
Map
它取决于值的类型,因为Map[K, V]
幺半群实例需要Semigroup[V]
实例。您可以在
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)))
工作中的 Scalaz 隐式是:
- 语法转换
ToSemigroupOps
将|+|
操作添加到Map
。 Map[String, Int]
的Monoid
实例使用Semigroup[Int]
实例。
- 语法转换
Map
的 Monoid
的代码