2016-12-23 5 views
4

CatsまたはScalazに、異なるコンテナタイプ間で変換するtypeclassがありますか?例えばScala(ネコまたはスカラ)のファンクタ(F [A] => G [A])の変換

  • オプション〜>
  • 試してみてください〜>それはFunctionK/~>/NaturalTransformationのように思える未来の
  • てみてください〜>
  • どちらかのオプション〜>リスト

は何もあり私は探していますが、インスタンスが定義されていないため、その理由がわかりません。

答えて

5

あなたが探しているのは自然変換です。それらは、ファンクタ間での形態を定義します(この場合、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 
} 
関連する問題