ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

なんとなく思いついた Scala でのライブラリ切り替え

今日オブジェクトのシリアライズ形式を切り替える方法考えなきゃで、ぼんやりと思いついた方法。

trait DataFormat {
  type Format
  type Formatter[T]

  def ser[Data: Formatter](input: Data): Format
  def de[Data: Formatter](input: Format): Data
}

trait Spray extends DataFormat {
  import spray.json._
  override type Format = JsValue
  override type Formatter[T] = JsonFormat[T]

  override def ser[Data: Formatter](input: Data): Format = input.toJson
  override def de[Data: Formatter](input: Format): Data = input.convertTo[Data]
}

で、コンパイルしたところ

Warning:(40, 8) higher-kinded type should be enabled
by making the implicit value scala.language.higherKinds visible.
This can be achieved by adding the import clause 'import scala.language.higherKinds'
or by setting the compiler option -language:higherKinds.
See the Scala docs for value scala.language.higherKinds for a discussion
why the feature should be explicitly enabled.
  type Formatter[T]

そーですか、警告スカ…
こんなコードばっか書いてるから IDE が不調になったりするのだ。意味は調べるけど。