• Haskell typefun В haskell чятике совершенно неожиданно выяснилось, что zipper-ы это производная от алгебраического представления типа, это ж круто! Так их понимать и писать на порядок удобнее.

Replies (13)

  • @qnikst, В каком чятике?
  • @ndtimofeev, на gitter.im
  • @qnikst, Даже в жуйке же писали уже давно об этом.
  • @qnikst, а ты не знал?
  • @alar, про производные ~ зипперы — не знал
  • @qnikst, я вот их брать не умею, но читал статью про зипперы, где они так определялись
  • @qnikst, а просветите, пожалуйста, что за производные у типов? про зипперы читал LYAHFGG
  • @cblp, не у типов, а у структур данных.
    Попыталсо было объяснить, но понял, что фигня какая-то. В итоге, в тред призывается qnikst
  • @cblp, Ок, мне тут уведомления забывали прийти, если не забуду, то подробно напишу, через час полтора
  • @qnikst, если не забудуЯ от тебя тпак просто не отстану
  • @alar, 1. У алгебраческих типов есть комбинаторный смысл. Для этого делаем отображение типа с N конструкторами в число N. Соотв Void — 0, Unit — 1, Int — a.
    2. Типы суммы переходят в операцию +, типы произведения в *, причем все законы, которые мы ожидаем от этих операций выполняются. Т.е. формула, которую мы получаем описывает структуру и количество вариантов данных. Функции (a -> b) переходят a^b.
    3. Далее замечается, что если для двух структур совпадает отображение, то существуют функции from,to для перевода из одной в другую, такие что from.to=to.from=id
  • @qnikst, Далее автор замечает, то если у нас есть какой-то рекурсивный тип, например список, описываемый как L=1/(1-a) (обретает смысл если получить ряд тейлора), то зиппер это просто производная, т.е. хм.. для a*a например это будет 2*a (т.е. информация где дырка и что вне дырки). Дальше этому дается подробное объяснение, которое я не дочитал ибо там Мартин-Лёф и треш и угар
  • @qnikst, ну и есть простая версия: chris-taylor.github.io