1

からValue型クラスに属するように制約された抽象型を使用したいのはcatです。Show

私の最初の試みは次のようなものです:

package examples
import cats._
import cats.data._
import cats.implicits._

class UsingShow1 {
  type Value <: Show[Value]  // Not sure if this declaration is right

  def showValues(vs: List[Value]): String = 
    vs.map(implicitly[Show[Value]].show(_)).mkString // Error line

}

しかし、コンパイラは暗黙のパラメーターを見つけられませんShow[Value]

前の例を次のように定義できることはわかっています。

class UsingShow2[Value: Show] {
  def showValues(vs: List[Value]): String = 
    vs.map(implicitly[Show[Value]].show(_)).mkString
}

ただし、型パラメーターの代わりに抽象型を使用できるかどうかを知りたかったのです。

4

1 に答える 1