FunctionK
概要
自然変換(Natural Transformation)
1階の型コンストラクタを1階の型コンストラクタに変換する関数を定義するデータ型
List->Option
FunctionKのエイリアス~>
List ~> Option
ランク1の多相関数を引数で受け取って、そのメソッドスコープ内で複数回適用したい時にFunktionKデータ型を使って解決できる。Scala型システムだけではランクN多相を表現できない
code:scala
def usePolyFuncA, B(f: A => ListA, b: B, s: String): (ListB, ListString) = (f(b), f(s))
fは適用する値毎に多相になって欲しいが、最初に適用した段階でA=Bに型が確定してしまう
code:scala
def usePolyFuncB(f: Id ~> List, b: B, s: String): (ListB, ListString) = (f(b), f(s))
usePolyFunc(pureList, 1, "x")
こちらでは多相関数を渡すことができている
例
MonadCancel
F~>Fな自然変換としてPoll[F]が定義されている
trait Poll[F[_]] extends (F ~> F)
Freeモナド
Scala
code:scala
}
code:scala
def applyA(l: ListA): OptionA = l.headOption }
参考