Cats または Scalaz に、異なるコンテナ タイプ間で変換する型クラスはありますか? 例えば
- オプション ~> 試す
- ~> 未来を試す
- ~> どちらかを試してください
- オプション ~> リスト
FunctionK
/ ~>
/NaturalTransformation
は私が探しているものかもしれませんが、インスタンスが定義されておらず、その理由がわかりません。
Cats または Scalaz に、異なるコンテナ タイプ間で変換する型クラスはありますか? 例えば
FunctionK
/ ~>
/NaturalTransformation
は私が探しているものかもしれませんが、インスタンスが定義されておらず、その理由がわかりません。
自然な変化はあなたが探しているものです。それらは、ファンクター間のモーフィズムを定義します (この場合、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
}