Я думал, почему класс типа Traversable
требует как Functor
, так и Foldable
, а не только Foldable
, так как он не использует какую-либо часть Functor
?
class (Functor t, Foldable t) => Traversable t where
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
sequenceA :: Applicative f => t (f a) -> f (t a)
Кажется, что законы для Traversable отсутствовали в документации для базы 4.6, что заставляет меня думать, что они могут быть получены из того факта, что каждый Traversable является Функтор?
В Суть документа с образцом итератора (раздел 5.1) в нем говорится, что для traverse
существуют некоторые бесплатные теоремы, которые поступают непосредственно из его типа, но бумага не углубляется, описывая, почему это так.
Где действуют законы Traversable
описанные в базовой документации 4.7?