4

Cats または Scalaz に、異なるコンテナ タイプ間で変換する型クラスはありますか? 例えば

  • オプション ~> 試す
  • ~> 未来を試す
  • ~> どちらかを試してください
  • オプション ~> リスト

FunctionK/ ~>/NaturalTransformationは私が探しているものかもしれませんが、インスタンスが定義されておらず、その理由がわかりません。

4

1 に答える 1

5

自然な変化はあなたが探しているものです。それらは、ファンクター間のモーフィズムを定義します (この場合、List[A]Option[A]型コンストラクター)。~>Scalaz では「演算子」を使用して定義できます。

def main(args: Array[String]): Unit = {
  val optionToList = new (Option ~> List) {
    override def apply[A](fa: Option[A]): List[A] = fa.toList
  }

  println(optionToList(Some(3)))
  println(optionToList(None))
}

収量:

List(3)
Nil

~>は、 trait のシンタティック シュガーですNaturalTransformation[-F[_], +G[_]]

/** A universally quantified function, usually written as `F ~> G`,
  * for symmetry with `A => B`.
  */
trait NaturalTransformation[-F[_], +G[_]] {
  self =>
  def apply[A](fa: F[A]): G[A]

  // Abbreviated for the answer
}
于 2016-12-23T09:36:40.677 に答える