2

Cats の simulacrum の @typeclass とは何かについて少し興味があります。

これはドキュメントの例であり、正常に機能しており、理にかなっています。

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 つの引数がある場合、@op に 3 つの引数を適用する方法がわかりません。私の理解では、セミグループは2つの引数の組み合わせです。ただし、コンパイルはエラーを報告しないので、@op マクロを改善して 2 つのパラメーターのみを受け入れるようにするか、@op に 3 つ以上の引数を使用するにはどうすればよいでしょうか。

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

0 に答える 0