자연스러운 변환이 당신이 찾고있는 것입니다. 그것들은 펑터 (functor)들 사이에서 형태를 정의합니다 (이 경우, List[A]
과 Option[A]
타입 생성자).
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))
}
수익률 : 당신은 Scalaz에 ~>
"연산자"를 사용하여 하나를 정의 할 수 있습니다
/** 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
}
:
List(3)
Nil
~>
는 특성 NaturalTransformation[-F[_], +G[_]]
에 대한 syntatic 설탕이다