在Cats中,@ op参数列表最多有2个参数吗?

时间:2015-09-06 07:35:13

标签: scala scala-cats

我对Cats中的simulacrum中的@typeclass有什么好奇心。

这是来自doc的示例,它工作正常且有意义。

import simulacrum._

@typeclass trait CanAppend[A] {
  @op("|+|") def append(a: A, b: A): A
  @noop def whatever: A
}

object SemiGroup extends App {

  implicit val intCanAppend: CanAppend[String] = new CanAppend[String] {
    def append(a: String, b: String): String = a + " " + b
    def whatever: String = ???
  }

  import CanAppend.ops._

  println("123" |+|"123" ) //123 123
}

但是,如果我在列表中有3个参数,我不知道3个参数如何适用于@op。根据我的理解,半群是两个参数的组合。但是,编译不会抱怨任何错误,所以我想知道@op宏应该被改进为只接受2个参数或者如何为@op使用更多的3个参数。

@typeclass trait CanAppend[T] {
  @op("|+|") def append(a: T b: T, C: T): T
}

0 个答案:

没有答案