Size: a a a

2021 March 07

к

кана in Haskell
Roman
из пропозола это богомерзкое говнище удалось вычистить
богомерзкое или нет, но полезное, а это намного важнее чем богомерзкость
источник

к

кана in Haskell
половина линзнокода это %~
источник

MP

Misha Puzanov in Haskell
у меня какие-то mixed feelings по этому поводу

с одной стороны очевидно меньше писанины, что всегда хорошо

с другой стороны, костыльное и неортогональное ad-hoc решение, которое плохо композится и еще и из-за него пришлось менять базовые правила синтаксиса. Родина тебе дала зигокопрофункторы для генерализации работы с произвольными стуктурами, а люди такие типа "ура мы теперь можем писать как в джаваскрипте".
источник

MP

Misha Puzanov in Haskell
а оно композится с линзами кстати?
понятно, что можно писать foo.bar ^. typed @Bla, но можно ли делать
let lens = (^. #bar).foo . typed in q & lens .~ w?
источник

MP

Misha Puzanov in Haskell
если композится, то наверное ок
источник

к

кана in Haskell
ну, или bar ^.. each . to (.x)

или сделать field-линзу, которая HasField будет использовать, и на нее лейбл повесить
источник

к

кана in Haskell
по сути будет generic-lens без генериков и призм
источник

R

Roman in Haskell
я полистал дифф, и я правильно понимаю, что они не стали захардкоживать никакой тайп класс, а вместо этого просто требуют от тебя добавить в скоуп имена getField и setField, чтобы геттеры и сеттеры работали? Это какое-то удивительно нетошнотворное решение
источник

MP

Misha Puzanov in Haskell
кана
по сути будет generic-lens без генериков и призм
тогда пойдет наверное
источник

к

кана in Haskell
Roman
я полистал дифф, и я правильно понимаю, что они не стали захардкоживать никакой тайп класс, а вместо этого просто требуют от тебя добавить в скоуп имена getField и setField, чтобы геттеры и сеттеры работали? Это какое-то удивительно нетошнотворное решение
это же наверное для поддержки ребиндабл-синтаксиса, а проверка все равно как-то будет без этого экстеншена
источник

R

Roman in Haskell
кана
богомерзкое или нет, но полезное, а это намного важнее чем богомерзкость
слова не мальчика, но кложуриста
источник

к

кана in Haskell
именно так)
источник

AA

A64m AL256m qn<co... in Haskell
Roman
я полистал дифф, и я правильно понимаю, что они не стали захардкоживать никакой тайп класс, а вместо этого просто требуют от тебя добавить в скоуп имена getField и setField, чтобы геттеры и сеттеры работали? Это какое-то удивительно нетошнотворное решение
стали, но только для гет, ну собственно давно уже стали. а класс для сеттеров они решили перепроектировать, так что он не попал в 9.2, только для включенного ребайндабл синтаксиса будут пока сеттеры работать
источник

R

Roman in Haskell
Roman
я полистал дифф, и я правильно понимаю, что они не стали захардкоживать никакой тайп класс, а вместо этого просто требуют от тебя добавить в скоуп имена getField и setField, чтобы геттеры и сеттеры работали? Это какое-то удивительно нетошнотворное решение
> Note : a{x = b} is setField @"x" a b.

так это че, я могу сделать свой собственный setField с полиформизмом и фандепами?
источник

AA

A64m AL256m qn<co... in Haskell
кана
и даже не так

ужасный

f (foo ^. #bar . #baz) 10

против

f foo.bar.baz 10

еще меньше скобок!
так второй вариант не сработает для реальных рекордов, которые с мейбями и коллекциями, т.е. так и придется вариантом с перхотью продолжать пользоваться
источник

AA

A64m AL256m qn<co... in Haskell
Roman
> Note : a{x = b} is setField @"x" a b.

так это че, я могу сделать свой собственный setField с полиформизмом и фандепами?
да
источник

R

Roman in Haskell
A64m AL256m qn I0
стали, но только для гет, ну собственно давно уже стали. а класс для сеттеров они решили перепроектировать, так что он не попал в 9.2, только для включенного ребайндабл синтаксиса будут пока сеттеры работать
а как этот класс для геттеров называется? Если я правильно понял сообщение
источник

AA

A64m AL256m qn<co... in Haskell
он вроде все тот же, что в 8.2 сделали
источник

R

Roman in Haskell
A64m AL256m qn I0
он вроде все тот же, что в 8.2 сделали
я вижу такое:

> When OverloadedRecordDot is enabled and RebindableSyntax is not enabled the name 'getField' is resolved to GHC.Records.getField. When OverloadedRecordDot is enabled and RebindableSyntax is enabled the name 'getField' is whatever in-scope name that is.
источник

к

кана in Haskell
A64m AL256m qn I0
так второй вариант не сработает для реальных рекордов, которые с мейбями и коллекциями, т.е. так и придется вариантом с перхотью продолжать пользоваться
ну да, но львиную часть линзокода, который чисто для рекордов, можно спокойно выпилить
источник