
A64m
16.09.2018
16:43:13
https://gist.github.com/kana-sama/6ac112aff933a34ea12c4878a80755fd
переписал вчерашние рекорды, теперь:
a) вся работа с ними изначально через линзы
b) они не статичны, то есть можно менять линзами типы полей
c) красивые лейблы для линз
все бы круто, но они не работают) Там оверлапинг инстанов для генерации линз, которого быть не должно вообще. Тыкал на шару OVERLAPS/PABLE/PING, не помогло, мануал тоже почитал, не помогло (то есть они говорят как правильно расставить приоритет, но там оверлапинг в принципе не должен был появиться). Может кто помочь? Для кода нужны только lens, ошибка возникает в самом конце (в месте использования), инстансы так же выделил комментариями
как не должно-то?
HasField name ((name ::: a) ': r) ((name ::: b) ': r) a b
HasField name ((name' ::: c) ': s) ((name' ::: c) ': t) a b
очевидно оверлапятся

kana
16.09.2018
16:44:09
второй инстанс же не подходит

Google

kana
16.09.2018
16:44:47
там не будет требуемого HasField name s t a b

A64m
16.09.2018
16:45:17
при оверлапе только голова считается

kana
16.09.2018
16:45:37
это поведение можно обойти?

A64m
16.09.2018
16:45:48
нет

kana
16.09.2018
16:46:05
окей, а убрать ошибку тут в принципе возможно?

A64m
16.09.2018
16:46:11
вернее разрешением оверлапа можно

kana
16.09.2018
16:46:46
и как его разрешить? Конкретный инстанс не указать, прагмы эффекта не имеют

A64m
16.09.2018
16:47:03
в смысле?

kana
16.09.2018
16:49:20
ну сначала я решил (вроде как нужно) добавить шагу рекурсии {-# OVERLAPS -}, не помогло, и я перебрал разные комбинации OVERLAP[S|PABLE|PING] у обоих инстансов в надежде что что-то прокнет, не помогло

A64m
16.09.2018
16:49:59
хммммм

kana
16.09.2018
16:51:27
даже так, я перебрал все 9 комбинаций, сейчас еще раз сделал это (ух, тык-дривен-девелопмент)

A64m
16.09.2018
16:52:17
overlapping должны били сработать, это как раз если лень думать что там кого перекрывает

Denis
16.09.2018
16:54:29
тут рекорды не смотрел?
https://github.com/target/row-types

Google

kana
16.09.2018
16:57:06
там другой подход
там хэшмап полей и отдельные row, у меня список полей и роу завязаны на список полей (зависимы)
первый подход (с отдельной мапой на типах и отдельной структурой для полей) предположительно без всяких unsafe/Any/Dynamic не обойтись, так как связи/зависимости между конкретными полями и их типами нет, нужно хранить ее в рантайме (индекс типа например) и кастить
и типа это не так и плохо, но противоречит моей цели

Alexander
16.09.2018
17:00:28
можно через олегинг
введением mutiparam type classes и вытаскиванием хвоста в голову
не знаю как четкий алгоритм описать
смысл в том что разбивается класс на 2 класса оснвоной и воспомогательный

kana
16.09.2018
17:01:44
продолжай

Alexander
16.09.2018
17:02:03
во вспомогательном параметры это голова и хвост
поэтому там можно делать overlap и все чекается
но мне приходится каждый раз когда это делаю очередной раз вспоминать как это делается
вроде тебе в приват я решение какой-то задачки через этот подход кидал?

kana
16.09.2018
17:02:56
ух, выглядит как страншый костыль, типа взять проблему выбора инстанса с компилятора на себя, попробую сделать

Alexander
16.09.2018
17:03:08
не помню, кому-то умному, но кто с type level магией начинал
давно весьма

kana
16.09.2018
17:03:22
да, возможно там про тайп-левел списки что-то было, преобразование его в дерево

Alexander
16.09.2018
17:03:55
там вроде похожая фишка использовалась

Denis
16.09.2018
17:04:37
а в generic-lens как?

Alexander
16.09.2018
17:09:12
не знаю, надо бы посмотреть

Google

Alexander
16.09.2018
17:09:25
а то наверняка я новые модные решения успускаю

kana
16.09.2018
17:09:49
https://wiki.haskell.org/GHC/AdvancedOverlap - тут есть подобное?

Alexander
16.09.2018
17:10:55
1.2 похожее

kana
16.09.2018
17:18:30
1.2 похожее
хм, а там без рекурсии, с рекурсией получается, что в вспомогательном классе будет использован основной, то есть взаимная рекурсия, так и задумано?

Alexander
16.09.2018
17:18:41
да

Terminator
16.09.2018
17:25:33
Arsen Kondratiev будет жить. Поприветствуем!

kana
16.09.2018
17:43:42
а можно как-то увидеть контекст дырки? А именно, какие словарики инстансов доступны?
типа вот я сделал
instance A => B
x :: B => a
x = _x
и я хочу увидеть, что в _x у меня доступен словарик A, хотя в общем случае это же не так, хм

A64m
16.09.2018
17:45:50
почему не так?

kana
16.09.2018
17:46:10
потому что возможно есть другие инстансы B, где нет требования A
instance (flag ~ HFalse) => ShowPred a flag
особенно вот это мне интересно, это какой-то способ указать дефолтное значение флага

kana
16.09.2018
17:47:29
но я не понимаю как оно работает

A64m
16.09.2018
17:47:37

kana
16.09.2018
17:56:00

A64m
16.09.2018
17:57:23
вроде нет
во втором случае False участвует в выборе инстанса

Alexander
16.09.2018
17:59:26
угу
в первом проверка идет после выбора инстанса

kana
16.09.2018
18:04:08
ух, ладно, мутил долго и много, на сегодня сдаюсь

Google

Dmitry
16.09.2018
18:30:26
https://gist.github.com/kana-sama/6ac112aff933a34ea12c4878a80755fd
переписал вчерашние рекорды, теперь:
a) вся работа с ними изначально через линзы
b) они не статичны, то есть можно менять линзами типы полей
c) красивые лейблы для линз
все бы круто, но они не работают) Там оверлапинг инстанов для генерации линз, которого быть не должно вообще. Тыкал на шару OVERLAPS/PABLE/PING, не помогло, мануал тоже почитал, не помогло (то есть они говорят как правильно расставить приоритет, но там оверлапинг в принципе не должен был появиться). Может кто помочь? Для кода нужны только lens, ошибка возникает в самом конце (в месте использования), инстансы так же выделил комментариями
Я автоматически делаю HasLensB (b::Bool) .... where flensB .... Потом flens = flensB @(x == y) и два инстанса HasLensB ('True | 'False) .... Надеюсь, что это в тему и решает проблему.

kana
16.09.2018
18:31:14
вот ща так пытался делать, ошибка не исчезла

Yuriy
16.09.2018
18:40:18

Alexander
16.09.2018
18:58:03
что у нас из memotrie хорошего есть?

Denis
16.09.2018
18:58:33

Alexander
16.09.2018
18:58:41
идеально если с поддержкой lru
были ещё

Admin
ERROR: S client not available

Alexander
16.09.2018
18:58:55
коноловоский нужно оптимизировать
иначе он не клёвый
т.е. с теор точки зрения он клёвый конечно
хотя в моём случае можно и свою мапу положить

Dmitry
16.09.2018
19:58:16

kana
16.09.2018
19:59:11

Dmitry
16.09.2018
19:59:21
надеялся обойтись одним классом HasLensB, но не получилось. Пришлось использовать еще HasLens

kana
16.09.2018
19:59:31

Dmitry
16.09.2018
19:59:52
Там рядом другой gist лежит на ту же тему, 4-месячной давности ;-)
тоже здесь спрашивали...

timCF
16.09.2018
20:10:56
привет!
пишет кто-нибудь юнит-тесты с использованием библиотеки tasty?
мне надо как-то протестировать там функцию которая возвращает значение в обёртке IO

Google

timCF
16.09.2018
20:11:43
чёт не могу найти как это правильно сделать

Yuriy
16.09.2018
20:14:39

timCF
16.09.2018
20:15:37
на одном значении
вот пример
https://github.com/timCF/happeteer/blob/771d568d9774364f8328ba55ca2d937e0594cabb/test/HappeteerTest.hs
вроде написано правильно но тест не компилится

Yuriy
16.09.2018
20:16:16
подключить tasty-hunit, взять оттуда testCase

Maxim
16.09.2018
20:17:00
хм, а можете по-простому объяснить в чем принципиальное отличие The Elm Architecture от FRP?
извиняюсь, если вопрос звучит глупо

Yuriy
16.09.2018
20:17:20

Andrey
16.09.2018
20:17:53
а можно объявлять временные типы данных в where внутри функции?
...
where data X = X
...

Yuriy
16.09.2018
20:18:21
исправь ошибки
я намекаю, что фраза «не компилируется» несёт слишком мало информации

timCF
16.09.2018
20:18:33
Yuriy
вот такая ошибка при попытке запустить тест
• No instance for (Eq (IO (Scraped URL)))
arising from a use of ‘assertEqual’

Yuriy
16.09.2018
20:18:35

Andrey
16.09.2018
20:19:01

timCF
16.09.2018
20:19:19
мои собственные типы deriving (Show, Eq, Ord)
я думаю тут вся сложность в IO