代码之家  ›  专栏  ›  技术社区  ›  davidrpugh

Parmap的Monoid实例?

  •  1
  • davidrpugh  · 技术社区  · 6 年前

    是否存在 Monoid 的实例 scala.collection.parallel.ParMap 在猫里?我不这么认为,但我不确定。

    如果不是,那么如何创建这样的实例呢?这是我到目前为止所拥有的…

    import cats._
    import implicits._
    
    def parMapMonoid[K, V]: Monoid[ParMap[K, V]] = {
      new Monoid[ParMap[K, V]] {
        def combine(v1: ParMap[K, V], v2: ParMap[K, V]): ParMap[K, V] = {
          ???
        }
        def empty: ParMap[K, V] = {
          ParMap.empty[K, V]
        }
      }
    }
    

    …你可以假设 幺半群 为类型定义的实例 V . 对于我的特定用例 type V=Int .

    2 回复  |  直到 6 年前
        1
  •  0
  •   Andrey Tyukin    6 年前

    k V

    def parMapMonoid[K, V](implicit vMon: Monoid[V]): Monoid[ParMap[K, V]] = {
      new Monoid[ParMap[K, V]] {
        def combine(v1: ParMap[K, V], v2: ParMap[K, V]): ParMap[K, V] = {
          val allKeys = v1.keys ++ v2.keys
          (for (k <- allKeys) yield {
            (k, vMon.combine(
              v1.getOrElse(k, vMon.empty),
              v2.getOrElse(k, vMon.empty)
            ))
          })(collection.breakOut)
        }
        def empty: ParMap[K, V] = {
          ParMap.empty[K, V]
        }
      }
    }
    

    allKeys

        2
  •  0
  •   simpadjo    6 年前

    ParMap Monoid[Map[_, _]] Map