
Maxim
18.10.2018
12:11:31
спасибо

Alexander
18.10.2018
12:35:29
не, не знаю даже как с текущими лейблами это сделать
там же генерится fromLabel @ label :: alpha
у тебя alpha из контекста не выводится, и из @label тоже не выводится

Google

Yuriy
18.10.2018
12:39:13
[pr|label|] — красиво? (пакет tagged)

A64m
18.10.2018
12:43:12
хуже чем @"label"

Alexander
18.10.2018
12:46:02
там конечно @["label"] т.к. список, но все равно
мне старая конвертация с proxy# больше нравилась

Maxim
18.10.2018
14:07:29
@qnikst еще маленький вопросик. я сделал в классе метод foo :: forall v vs. KnownSymbol v, In v vs => r vs -> r vs (r -- тип по которому класс), но вызвать его в духе foo @"bar" не выходит
а вот если сделать foo :: forall v vs. KnownSymbol v, In v vs => Proxy v -> r vs -> r vs, то получается вызвать foo (Proxy @"bar")
констрейнт In просто проверяет, что тип есть в списке

Alexander
18.10.2018
14:08:48
важно, что внутри

Maxim
18.10.2018
14:08:54
<interactive>:1:10: error:
• Expected kind ‘[ghc-prim-0.5.1.1:GHC.Types.Symbol] -> * -> *’,
but ‘"bar"’ has kind ‘ghc-prim-0.5.1.1:GHC.Types.Symbol’
• In the type ‘"bar"’
In the expression: foo @"bar"
внутри чего?

Alexander
18.10.2018
14:09:03
если ты внутри тела используешь v то не вижу, что не так
функции

Maxim
18.10.2018
14:09:38
ладно, если я к этой штуке еще вернусь, спрошу подробнее

Alexander
18.10.2018
14:09:41
не ожидаю такую ошибку в первом случае

Terminator
18.10.2018
14:47:23
@droptheplot будет жить. Поприветствуем!

Google

Maxim
18.10.2018
16:10:03
А где можно нормально почитать про final и initial?
Я так и не понял чем принципиально отличаются гадты и тайпклассы в final tagless
Особенно на всяких expr
Типа в одном случае с большой буквы, в другом с маленькой. И что с того?

A64m
18.10.2018
16:11:32
http://okmij.org/ftp/tagless-final/course/lecture.pdf

Maxim
18.10.2018
16:13:03
А почему initial и final то?

A64m
18.10.2018
16:13:18
так что тогда уж с дататайпс а ля карт сравнивать
прямо в начала пдф-а написано
где-то на первой-второй странице

Maxim
18.10.2018
16:20:45
Спасибо
Гугл почему-то выдаёт на сайте Олега какую-то страничку, где вообще непонятно куда смотреть - просто список статей

Alexander
18.10.2018
16:23:34
это его сайт такой

Denis
18.10.2018
16:24:00
@maksbotan как вариант я сделал небольшой реп с разными подходами
https://github.com/xgrommx/purescript-from-adt-to-eadt
правда на пурсе
в хаскель еще можно всякие gadts, type families, data families

Maxim
18.10.2018
16:31:56

Denis
18.10.2018
16:33:44

Julian
18.10.2018
17:43:33

Denis
18.10.2018
17:44:08

Google

Julian
18.10.2018
17:44:09
Википедия говорит, что это так

Denis
18.10.2018
17:44:39

Julian
18.10.2018
17:45:11
Верю!

Oleg
18.10.2018
18:04:16

Denis
18.10.2018
18:04:37

Maxim
18.10.2018
18:06:37
еще уместно спросить, насколько часто expression problem встречатеся где-то, кроме игрушечных примеров
и так ли успешно подходы, хорошо работающие для нее, обобщаются на другие задачи

Denis
18.10.2018
18:07:33
вот mtl же применяет идею final tagless

Oleg
18.10.2018
18:11:16
Во всяких кровавых ентерпрайзах регулярно такая беда с моделированием доменной области, чтобы можно было дополнять её, что чуть не симпозиумы внутренние устраивают

Denis
18.10.2018
18:15:38
как вариант и рекорд
в пурсе есть оба, которые делаются через row polymorphism

Mikhail
18.10.2018
18:18:22
Народ, а есть единый стиль констант в хаскеле? Как например в си принято их писать с большой буквы или с маленькой k, а потом большими, напр. kCONSTANT = 5 в глобальном скопе
в чей код заглянуть, чтобы нахвататься правильного стиля? Вряд ли Prelude идеален в этом плане?

Андрей
18.10.2018
18:34:13
а большого выбора то и нет. с большой буквы не получится, с разделителями-минусами тоже ) остается снейк_кейс или камелКейс
хотя всякие штрихи` и прочие символы вносят свое разнообразие, это да

Александр
18.10.2018
18:39:01
Юникодом можно. Константы - на кириллице.

B. L.
18.10.2018
18:42:30
тогда уж жирным

Google

Mikhail
18.10.2018
18:45:25
арабской вязью лучше, чтобы никто не разобрался

Андрей
18.10.2018
18:46:48
не, эмодзи лучше

Mikhail
18.10.2018
18:53:50
и вязь в терминале показывает некорректно

B. L.
18.10.2018
18:54:35
{-# LANGUAGE UnicodeSyntax #-}?

Mikhail
18.10.2018
18:54:54
a, ок
тупая идея
лучше вариант с kCONSTANT
а юникод в листингах оставим для swift playgrounds

A64m
18.10.2018
19:05:56
Prelude> :set -XPatternSynonyms
Prelude> pattern CONSTANT = 42
Prelude> CONSTANT
42
Prelude> case CONSTANT of CONSTANT -> True
True
выбор есть

Alexander
18.10.2018
19:06:35
чего делать, в случае когда нужно бы сгенерить инстанс для Aeson но при этом бы навесить доп констреинтов
вот как умные люди поступают, чтобы без дубликации кода многого

kana
18.10.2018
19:11:42

Alexander
18.10.2018
19:12:52
не ограничения на значения внутри
типа одно поле больше другого и т.п.

kana
18.10.2018
19:13:40
ааа, ну это чет слишком круто для "сгенерить" звучит

Alexander
18.10.2018
19:14:01
т.е. я сделал Structure и ValidatedStructure
первое генерю автоматом
второе как parseJSON x = parseJSON »= \x -> checkAllStuff » pure (coerce x)

Google

Alexander
18.10.2018
19:15:14
ну и для FromJSON с Swagger используются автогенеренные инстансы

Oleg
18.10.2018
19:15:23

Alexander
18.10.2018
19:15:31
в структуре куда оно вложенно используется ValidatesStructure и coerce
но это как-то закат луны вручную
можно хотя свою генерацию запилить, куда можно передаваьт проверки
щас посмотрю что в swagger схеме нагенерилось

kana
18.10.2018
19:18:19

Alexander
18.10.2018
19:18:26
да

kana
18.10.2018
19:26:36

Alexander
18.10.2018
19:27:01
не там хитрая генерация
я да и TH, generic тормоз
т.к. нужно делать свою обёртку куда validate передавать можно скорее всего

Maxim
18.10.2018
19:45:13
https://www.youtube.com/watch?v=o_4EX4dPppA
смотрели? что он там говорит?

Alexander
18.10.2018
21:18:54
@A64m_qb0 как в aeson-lens достать в из ключа массив значений все определенного типа
^? "foo" . _Array ???

A64m
18.10.2018
21:23:30
^? key "foo" . _JSON :: Maybe (Vector Int)
@qnikst ^

Alexander
18.10.2018
21:25:07
прикольно