Looking for haskell Answers? Try Ask4KnowledgeBase
Looking for haskell Keywords? Try Ask4Keywords

Haskell LanguageProfunctor


前書き

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 関連する例