Alexander
в смысле?
Alexander
в этом же фишка lens
Cheese
да, но не ключевая
Alexander
я не знаю почему я должен согласиться
Alexander
врооде архитектурная основа пакета
Cheese
точнее, это фишка линз Кметта, но не очень фишка линз Лаарховена
Vasiliy
ключевая фишка lens, как я понимаю, в том, что линзы и призмы можно определять не завися от самой библиотеки
Cheese
если я правильно уловил их дух
Alexander
фишка линз Кметта, что там newtype вокруг нет
Denis
там весь дизайн в том, чтобы они композились с помощью .
Alexander
линзы ван Лаарховена, это ж тоже функция, и за счет подстановки разных Functor/Applicative - мы меняем поведение
Denis
поэтому это функции без ньютайпов
Alexander
. можно и Category композить
Alexander
правда слегка другой точкой
Cheese
если в нутайп обернуть, их всё равно можно композить (Category..)
Denis
там точка менее такая, ага )
Alexander
интересно сколько бы тыщ лет и трупов заняло её втаскивание в Prelude
Alexander
вместо (.)
Alexander
даже учитывая полную обратную совместимость
Cheese
и переписанных учебников
Alexander
но ОШИБКИ! НОВИЧКИ!!!!11111 адын
Alexander
а учебники бы пришлось переписывать?
Denis
столько работы для криса алена
Denis
ведь только он знает как учить новичков
Alexander
ему пофиг, он единтсвенный в мире умеет преподавать
Alexander
так что подстроится
🍅Ťомат
А тут ругаться можно?
Alexander
матом - крайне не желательно
Cheese
🍅Ťомат
Ок.
Alexander
цензурно - можно
Cheese
действительно, основной тип призм определяется через вот такую крокозябру
type Prism s t a b =
forall (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p s (f t)где Choice — подкласс Profuctor.
но зачем?
Vasiliy
если заменить Choise на Strong, получится Lens
Vasiliy
наверное, это круто
Alexander
Choice для призмов
Alexander
где нужно выбор сделать
Alexander
Applicative для траверсов
Alexander
Vasiliy Strong подкласс Choice же?
Alexander
/me пошёл проверять
Vasiliy
а я не знаю, я вот как раз и пытаюсь в это всё въехать
Alexander
а не..
Alexander
@cblp_su смотри, Choice нужен ,чтобы у тебя могли быть разные ветки, тут ветки возникают из-за того, что мы можешь сматчить структуру, а можешь нет
кана
Да, кстати, тоже появился вопрос, зачем призмы делались через профункторы, если обычные линзы через стрелки
Alexander
а в чем разница?
Alexander
или про то, что там Strong, а не Choice?
Kirill
Alexander хаскелю скоро уже 30 не за горами
Alexander
это включает, то что 20 ему уже было
A64m
то что было 30 лет назад сильно от хаскеля отличалось, да и ghc не тридцать
A64m
но что-то немного есть имплементаций, в которые ВНЕЗАПНО специализацию конструкторов добавляли, такие компиляторы с самого начала своей истории ее и делают, вроде млтона какого-нибудь
A64m
разве что выборочную специализацию для выбранных пользователем конструкторов добавляют
Alexander
rust?
A64m
а что в расте ее сначала не было?
Alexander
а да, была конечно, неправильно прочитал..
🍅Ťомат
Denis
Что значит рабочие примеры? Это из библиотеки profunctors, у неё базилион зависимостей.
Denis
тьфу, это из линз конечно же
Alexander
в смысле это ж Prism
Denis
я чего-то подумал что там Strong
Alexander
все призмы имеют такой тип
Denis
угу
Denis
от линз, впрочем, тоже базилион пакетов зависит
Denis
чего-то у меня сегодня с построением фраз
🍅Ťомат
Denis
я из пальцев не могу такую фигуру сложить, читайте про призмы
A64m
@qnikst а как, кстати, в расте специализация устроена? Там вообще раздельная компиляция есть? Или они специализации под размер делают, а не конкретный тип?
Alexander
в соседнем чятике спрашивать надо
A64m
действительно
Alexander
я не шарю : ] если что
🍅Ťомат
Alexander
https://t.me/rustlang_ru
🍅Ťомат
Alex
A64m
да для призм просто нету других подходящих классов
A64m
для линз и траверсалов есть "стандартная" иерархия, так что могут быть непрофункторные линзы, но с призмами то уже деваться некуда
Alex
ну оно и теоретически как-то красивше
Alex
профункторы - категорификация реляций, призмы-линзы приехали из реляционного программирования
A64m
а тем временем https://github.com/ghc/ghc/commit/cca2d6b78f97bfb79bef4dc3f75d6c4d15b94680
A64m
правда вроде пока это полностью бесполезная фича (т.е. два флоата занимают теперь места как дабл, а не два дабла, но на этом все, потому что все разновидности интов одного размера)
Alexander
угу
A64m
ну и очередной набор оптимизаций (которые СПЖ упоминал в докладе на хаскельэкс как еще недоделанные)