Applicative
より深く勉強するうちに、私は にたどり着きましたTraversable
。LYHGGFoldable
からは知っていましたが、前者はまだ見ていないので、Traversable に関する Haskell wikiを読み始めました。
それを読んでいるうちに、 が に平行で、 が に平行である理由Foldable.fold
がわかりました。Traversable.sequenceA
Foldable.foldMap
Traversable.traverse
また、 everyTraversable
も aFoldable
および aFunctor
でありsequenceA
、traversal
相互にデフォルトの実装があることも確認しました。
traverse f = sequenceA . fmap f
sequenceA = traverse id
foldMap
したがって、の最小完全定義であるLYHGG で見たようにFoldable
、それは と平行であると考えたtraverse
ので、fold
(これは と平行ですsequenceA
) も最小完全定義になります (そうではありません)...Foldable
はではないので、これを適用することはできませんFunctor
。Traversable
foldMap f = fold . fmap f
fold = foldMap id -- this is ok
なぜすべてFoldable
が aではないのでしょうか?実際には ではないFunctor
インスタンスは何でしょうか?Foldable
Functor