あなたが探しているのは自然変換です。それらは、ファンクタ間での形態を定義します(この場合、List[A]
とOption[A]
タイプのコンストラクタ)。あなたはScalazで~>
"演算子" を使用して1を定義することができます。
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
~>
は、形質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
}