У меня проблема. Мне почему-то кажется, что если для типа t можно сделать (а -> b) -> t a -> t b, то и Applicative f => (a -> f b) -> t a -> f (t b) тоже можно и любой Functor — всенепременно Traversable.
2017-12-22 16:38:54

Участники:
@ndtimofeev - 4, @qnikst - 4

@qnikst
`(,) r` - Functor, но не Applicative
#2892736/1 2017-12-22 18:14:10
@ndtimofeev
Не… Я имею в виду то что любой Functor по всей видимости Traversable, а не Applicative.
#2892736/2 → /1 2017-12-22 18:15:56
@qnikst
ты хочешь сказать, что для любого функтора существует Traversable?
#2892736/3 → /2 2017-12-22 18:27:39
@ndtimofeev
Угу.
#2892736/4 → /3 2017-12-22 18:58:58
@ndtimofeev
Ну то есть Traversable это такой обобщённый Functor, который не накладывает никаких дополнительных ограничений на тип. Тогда Functor - это Traversable через Identity, а Foldable - через Const. Вопрос не в том почему у нас столько специализированных функций, а в том почему у нас столько лишних классов.
#2892736/5 → /3 2017-12-22 19:18:16
@qnikst
traverse f t = sequenceA (fmap f t)?
#2892736/6 2017-12-22 21:15:11
@ndtimofeev
Не… Это выражение traverse через traverse.
#2892736/7 → /6 2017-12-22 22:48:26
@qnikst
я не понимаю почему traversable выражается через fmap и почему любой функтор - траверсабл.
#2892736/8 → /7 2017-12-23 07:50:54