【问题标题】:Is there a typeclass for all sequences in Scala?Scala 中是否有适用于所有序列的类型类?
【发布时间】:2016-03-14 19:28:31
【问题描述】:

我在处理代数结构,我发现 Numeric 类型类非常好用,表示数值。

所以我可以这样写我的幺半群实例:

implicit def add[A: Numeric] = new Monoid[A] {
  def mempty = implicitly[Numeric[A]].zero
  def mappend(a0: A, a1: A) = implicitly[Numeric[A]].plus(a0, a1)
}

这看起来像个花花公子。但是我可以用序列做什么?我找不到执行标准 Scala 集合序列的类型类。我想写这样的东西:

def concat[A : SeqTC] = new Monoid[A] {
  def mempty = implicitly[SeqTC[A]].empty
  def mappend(a0: A, a1: A) = implicitly[SeqTC[A]].++(a0, a1)
}

【问题讨论】:

  • 看看 CanBuild 和 CanBuildFrom

标签: scala


【解决方案1】:

根据@TrustNoOne 的评论,这就是我所做的。而且效果很好。

def concat[A, S[A] <: Seq[A]](implicit bf: CanBuildFrom[S[A], A, S[A]]) = new Monoid[S[A]] {
  def mempty = bf().result()
  def mappend(a0: S[A], a1: S[A]) = bf.apply().++=(a0).++=(a1).result()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2018-03-19
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多