Size: a a a

2020 November 23

к

кана in Haskell
а еще генерик-линзы помогут
источник

MK

Maxim Koltsov in Haskell
видимо
источник

KV

Kirill Valyavin in Haskell
кана
тут помогут рекорды, где схожим аргументам давать одинаковые имена полей
Я так и делаю, но это не полностью решает проблему
источник

KV

Kirill Valyavin in Haskell
кана
а еще генерик-линзы помогут
Ну хз такое
источник

к

кана in Haskell
ну то есть тут кто-то предлагал как делать
источник

к

кана in Haskell
вместо каждого поля ньютайп
источник

к

кана in Haskell
вместо селекторов typed @FieldName
источник

к

кана in Haskell
Kirill Valyavin
Я так и делаю, но это не полностью решает проблему
звучит как задача, возможно ее кратко сформулировать?
источник

KV

Kirill Valyavin in Haskell
Подержите моё пиво пока я перепишу 10к строчек кода, ага
источник

AA

A64m AL256m qn<co... in Haskell
вот тут я успешно попробовал найти ответы на пару предыдущих вопросов о линзах, правда сам-то я ответы знал и так, так что на чистоту эксперимента это явно плохо должно было повлиять
источник

AA

A64m AL256m qn<co... in Haskell
Переслано от A64m AL256m qn<co...
кстати типдырки достаточно умные чтоб подсказать вот тут
> ([Left 1, Right (Just 2), Right Nothing]::[Either Int (Maybe Int)]) ^.. each . ((_Right . _Just) `_` _Left) :: [Int]

failing

или, к примеру, вот тут
[("foo", Just (1::Int)),("bar", Nothing),("baz", Just 2)] ^.. each . _ _Just :: [(String, Int)]

aside и below
источник

к

кана in Haskell
Maxim Koltsov
λ> case "abc" of (x :: a) -> print $ typeRep @a
[Char]
хм, ну это ок, да, но с let все так как-то не оч связано
источник

KV

Kirill Valyavin in Haskell
кана
звучит как задача, возможно ее кратко сформулировать?
Есть список, в котором элементы типа-суммы, причём у разных конструкторов бывают одинаковые поля. Надо достать из списка два поля, одинаковые для двух разных конструкторов, а остальное игнорировать
источник

к

кана in Haskell
A64m AL256m qn I0
Переслано от A64m AL256m qn<cores> I0
кстати типдырки достаточно умные чтоб подсказать вот тут
> ([Left 1, Right (Just 2), Right Nothing]::[Either Int (Maybe Int)]) ^.. each . ((_Right . _Just) `_` _Left) :: [Int]

failing

или, к примеру, вот тут
[("foo", Just (1::Int)),("bar", Nothing),("baz", Just 2)] ^.. each . _ _Just :: [(String, Int)]

aside и below
хм, удивлен удивлению, я думал в типодырках просто полный перебор с поиском всего что кастуется к нужному типу, а там похоже чет сложное
источник

к

кана in Haskell
Kirill Valyavin
Есть список, в котором элементы типа-суммы, причём у разных конструкторов бывают одинаковые поля. Надо достать из списка два поля, одинаковые для двух разных конструкторов, а остальное игнорировать
"одинаковые для двух разных конструкторов" вот тут не понял
источник

к

кана in Haskell
то есть должно быть два значения A {} и B {}, но у них должно быть одинаковое поле с одним значением?
источник

KV

Kirill Valyavin in Haskell
data X = A { x :: () } | B { x :: () }
источник

к

кана in Haskell
сложность я так понимаю именно в том что достать нужно два поля, потому что с одним полем было бы each . #x
источник

KV

Kirill Valyavin in Haskell
Да, но поле с именем х ещё может попасться в других конструкторах, так что надо ещё фильтровать
источник

KV

Kirill Valyavin in Haskell
В итоге я написал что-то типа кастомных призм, на самом деле Maybe-значную функцию с матчингом, которая нужные поля выдаёт
источник