私は次のようにADTのすべてのメンバーのために使用することができる(猫0.9から)Show
のインスタンスを定義しようとしています:特定の型のすべてのサブクラスで使用できる、どのようにしてスカラーの型クラスのインスタンスを定義できますか?
import $ivy.`org.typelevel::cats:0.9.0`, cats.Show
sealed abstract class Colour(val name: String)
implicit val ColourShow = new Show[Colour] {
def show(c: Colour) = c.name
}
object Colour {
object Red extends Colour("Red")
object Blue extends Colour("Blue")
}
import Show._
println(Colour.Red.show)
該当するインスタンスはしかし、Red
のために見つけることができません。
Compiling /Users/Rich/Projects/worksheets/fp-patterns/Colours.sc
/Users/Rich/Projects/worksheets/fp-patterns/Colours.sc:16: value show is not a member of object ammonite.$file.Colours.Colour.Red
val res_5 = println(Colour.Red.show)
^
Compilation Failed
このようにタイプメスを使用することはできますか?私は、Colorの各コンクリートのインスタンスごとに個別のインスタンスを定義する必要がないようにしようとしています。
てみ '(Colour.Red:カラー) – OlivierBlanvillain
この.show'はまだ/'コンパイル/Users/Rich/Projects/worksheets/fp-patterns/Colours.sc を与えます$ file.Colours.Colour val res_5 = println((Colour.Red:Color).show) ユーザ/リッチ/プロジェクト/ワークシート/ fp-patterns/Colours.sc:16:value showはアンモナイトのメンバーではありません。^ コンパイルに失敗しました ' –
'import cats.implicits._' – OlivierBlanvillain