在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
〜>特性天然转化的合成糖[-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 }