
Index
19.07.2018
20:44:41
data T1 = MkT1 A B C
data T2 = MkT2 A (B :*: C) -- not really but you get the idea

A64m
19.07.2018
20:44:43
это точно? что кроме анпака там на представление влияет?

Index
19.07.2018
20:44:51
наверняка в один Generic раскроется
Или там будет вот это поле обернуто в какой-нибудь K?

Google

A64m
19.07.2018
20:45:40
нет, будет метой отличаться, он для вложенного конструктора метаинформацию добавит же

Index
19.07.2018
20:45:47
понял
ну тогда да, можно реассоциировать и будет работать
лучше бы сразу generics-sop были, а не эти вложенные страсти
А, ну в общем-то можно для структурной эквивалентности брать https://hackage.haskell.org/package/generics-sop-0.3.2.0/docs/Generics-SOP.html#t:Code и сравнивать
прям посредством ==
structuralCast :: (Code a == Code b) ~ True => a -> b
structuralCast = unsafeCoerce
Хотя это всякие ньютайпы не снимет, надо вместо == пройтись по этим кодам и раскрыть все это в Coercible-констрейнты

M
20.07.2018
10:54:03
лол

Alexander
20.07.2018
11:01:51
исчез..

? animufag ?
20.07.2018
16:34:23
ахах

Dmitry
20.07.2018
16:38:44
бесполезно. но вообще настроить автоматический бан по длине ника - не самая плохая идея
ну или длине/частотам - скормить какой-нить нейросетке или тупо в knn

Google

Denis
20.07.2018
17:19:53
подскажите, как сделать, чтобы пустой массив тоже парсился?
P.parse (P.between (P.char '[') (P.char ']') $ P.sepBy P.anyChar (P.char ',')) "" "[]"

Ilya
20.07.2018
17:37:16
мне кажется anyChar консьюмит ']'
и всё взрывается
это парсек?
можно заменить P.anyChar на P.noneOf "]"?

Denis
20.07.2018
17:54:00

Ilya
20.07.2018
17:54:31
ну оно будет парситься же
там даже наверное нужно будет P.noneOf "],"

Denis
20.07.2018
17:55:18

Ilya
20.07.2018
17:55:43
P.parse (P.between (P.char '[') (P.char ']') $ P.sepBy (many $ P.noneOf "],") (P.char ',')) "" "[]"

Denis
20.07.2018
17:58:50

kana
20.07.2018
17:59:31

Ilya
20.07.2018
17:59:38
ну с большой степенью вероятности этот парсер не будет ожидать первым символом , или ] и всё будет работать

kana
20.07.2018
17:59:43
длинный ник не значит реклама
а банить человека за просто длинный ник это шиза какая-то
потом будем черных банить

Denis
20.07.2018
18:02:31

Igor
20.07.2018
18:02:56

Denis
20.07.2018
18:03:00
что если так?

Ilya
20.07.2018
18:04:12
да скорее всего тебе это не нужно, просто myParser оставь

Google

kana
20.07.2018
18:04:23

Denis
20.07.2018
18:04:38

Ilya
20.07.2018
18:04:51
да пофиг
это уже захендлит sepBy

Антон
20.07.2018
18:05:08

Ilya
20.07.2018
18:05:10
если твой парсер не законсьюмит запятую или скобочку

Alexander
20.07.2018
18:05:13
в парсере просто парсер элемента не должен считать ] подходящим символом

Denis
20.07.2018
18:06:20
да пофиг
noneOf "[," есть anyToken без [ или ,?

Ilya
20.07.2018
18:06:42
да

Alexander
20.07.2018
18:07:14
просто anyChar-ом внутри собирать - это так себе идея

Denis
20.07.2018
18:07:51
хм, а как lookAhead использовать?

kana
20.07.2018
18:17:57

Alexander
20.07.2018
18:18:01
это который следующий токен берет или вообще вверх без консьюма смотрит?

kana
20.07.2018
18:18:07
мы с тобой стояли после лекций, я такси ждал
ну ясно все

Alexander
20.07.2018
18:18:27
я знаю
я конечно людей не очень запоминаю, но не настолько же

Admin
ERROR: S client not available

Alexander
20.07.2018
18:20:24
у меня несерьёзные комментарии что-ли настолько неочевидных?

Google

Ilya
20.07.2018
18:23:42
как минимум в озвученной задаче это не выглядит необходимым

Алексей Ayaye :)
20.07.2018
18:54:03
lookAhead по идее нужен, когда грамматика локально выходит за рамки класса, с которым умеет штатно работать конкретный генератор парсеров. например, грамматрика везде LL(1), а вот тут - 3, то есть, решение на основе одного следующего токена принять нельзя, надо посмотреть на 3. Или вообще попробовать распарсить на неизвестное количество токенов и на основе результата принять решение.

Антон
20.07.2018
18:56:46

Алексей Ayaye :)
20.07.2018
18:58:07

A64m
20.07.2018
19:42:40

Антон
20.07.2018
21:11:48
а какая разница? понятие lookahead от языка не зависит
Это я к тому, что в C и C++ настолько дурацкая грамматика, что для корректного парсинга может потребоваться неограниченный в теории lookahead. И ещё в этих языках парсер обращается к тайпчекеру, потому что без этого некоторые конструкции не в состоянии распарсить

Yuriy
20.07.2018
21:17:36
вроде как раз С легко парсить, это С++ страшен

Антон
20.07.2018
21:25:09

Yuriy
20.07.2018
21:27:21
Оператор запятая
ты не можешь по предшествующему коду её отличить от аргументов функции или как?

Антон
20.07.2018
21:43:23
Ну и типы функций в аргументах читаются по спирали

Maxim
21.07.2018
13:29:41
ох как телеграм испортил всё, тьфу

Антон
21.07.2018
13:34:08

Pig
21.07.2018
13:34:28

Maxim
21.07.2018
13:35:33
```
pre (l1 `failing` l2 `failing` l3) . non (error "impossible")
```
нет, я сдаюсь

Pig
21.07.2018
13:36:11
pre (l1 `failing` l2 `failing` l3) . non (error "impossible")

Google

Maxim
21.07.2018
13:37:00
интересно, почему isn't в линзах стандартно, а is запихали в Extras

Pig
21.07.2018
13:37:01
Перемудрили с редактированием, раньше проще было

Maxim
21.07.2018
13:37:17
согласен

Yuriy
21.07.2018
13:49:12

Maxim
21.07.2018
13:50:12
ты предлагаешь мне делать case foo of Bar -> setSmth True; Baz -> setSmth False вместо setSmth $ is _Bar foo?

Yuriy
21.07.2018
13:50:20