Functor
概要
構造に影響を与えずに中身の値に変換を適用できる
中の値に処理を適用する以外には何も起こってはいけない
関数を作用に包まれた関数にリフト
中身への適用でも関数のリフトでもどちらの解釈をプリミティブとしても等価
値自体に意味・構造を付与できる
作用に囲まれた値(型に包まれた)が二つあったとしても、Functorではそれらを組み合わせることはできない
有限オートマトンレベル
関手
圏から圏へと対象と射の「対応付け」をおこなうもの
F[A]=>F[B]の変換がFunctorであるがその操作によって種類ができる
A=>Bという出ていく矢印によってF[B]とみなす→Functor
フリー定理
code:フリー定理
map(x)(f) == f(x)
↓
map(map(x)(g))(f) == map(x)(f compose g)
条件
map
Identity
fa.map(a => a) == fa
Composition
fa.map(g(f(_))) == fa.map(f).map(g)
例
Function1
(func1 map func2)(1)
関数合成もmap操作
Scala
code:scala
def mapA, B(fa: FA)(f: A => B): FB }