Haskell Language
Profunctor
サーチ…
前書き
Profunctorにより提供される型クラスであるprofunctorsパッケージData.Profunctor 。
詳しい説明は、「備考」を参照してください。
構文
- dimap :: Profunctor p =>(a - > b) - >(c - > d) - > pbc - > pad
- lmap :: Profunctor p =>(a - > b) - > pbc - > pac
- rmap :: Profunctor p =>(b - > c) - > pab - > pac
- dimap id id = id
- lmap id = id
- rmap id = id
- dimap fg = lmap f。マップg
- lmap f = dimap f id
- rmap f = dimap id f
備考
Profunctorは、Hackageの文書で説明されているように、「最初の議論は反変的で2番目の議論は共変である。
それはどういう意味ですか?まあ、バイフォンターは普通のファンクターのようなものですが、1つではなく2つのパラメータがあり、それぞれにマップするfmapような関数があります。
「共変」とは、 rmapの2番目の引数が通常のファンクタのようなものであることを意味します。マッピング関数( rmap )はProfunctor p => (b -> c) -> pab -> pacという型シグネチャをProfunctor p => (b -> c) -> pab -> pacます。これは関数を第2引数にマップするだけです。
"contravariant"なので、最初の議論は少し奇妙になります。通常のファンクタのようにマッピングするのではなく、そのマッピング関数( lmap )はProfunctor p => (a -> b) -> pbc -> pacという型シグニチャを持っています。この一見逆方向のマッピングは、関数への入力に対して最も意味があります。入力に対してa -> bを実行しa -> b次に新しい入力をaとして実行aます。
注意:通常、1つの引数のファンクタの命名は少し誤解を招く: Functor型クラスを実装し、「共変」ファンクタ、「反変」ファンクタが実装されている間、 Contravariant中に型クラスData.Functor.Contravariant 、および以前に(誤解を招くと命名) Cofunctor中に型クラスData.Cofunctor 。
( - >)Profunctor
( - >)は、プロファウンダの簡単な例です。左の引数は関数への入力で、右の引数は読者のファンクタのインスタンスと同じです。
instance Profunctor (->) where
lmap f g = g . f
rmap f g = g . g