
Index
27.01.2018
10:16:34
в пакет мне
https://github.com/int-index/union/issues/8
И матчить так:
case u of
OU1 a -> ...
OU2 b -> ...
OU3 c -> ...
А еще можно поэкспериментировать с type-indexed паттернами, чтобы было вроде
case u of
OU (a :: Integer) -> ...
OU (b :: Bool) -> ...
OU (c :: Char) -> ...

Google

Index
27.01.2018
10:25:25
Правда мне кажется, что с exhaustiveness-чекером тут не договоришься

Дмитрий
27.01.2018
10:31:48

Index
27.01.2018
10:32:14
Не хранит
Но там не просто так OU написано :)

Alexander
27.01.2018
10:33:26
а с сетами не удобно что я не знаю разумного способа жить с перестановками элементов

Index
27.01.2018
10:44:07
В общем я сделал OU, а не exhaustiveness придется забить
pattern OU :: UElem a as (RIndex a as) => a -> OpenUnion as
pattern OU a <- (preview openUnion -> Just a)
where OU a = review openUnion a
Блин, бенчмарки не работают почему-то
Benchmark bench: RUNNING...
benchmarking openUnion matching 1st
time 4.897 ns (4.892 ns .. 4.905 ns)
bench: <stdout>: commitBuffer: invalid argument (invalid character)
1.000 RBenchmark bench: ERROR
что это вообще такое

Alexander
27.01.2018
10:45:16
ТН могло бы помочь

Index
27.01.2018
10:45:35
С чем?

Google

Index
27.01.2018
10:45:53
Ты предлагаешь каждый кейс генерить?

Alexander
27.01.2018
10:45:55
т.е. если у тебя есть split возвращающий элемент или сет без этого типа

Index
27.01.2018
10:46:09
Есть такой, да

Alexander
27.01.2018
10:46:10
тогда вложенные матчи чнкаются

Denis
27.01.2018
10:46:11

Alexander
27.01.2018
10:46:21
но писать это руками не хочется

Index
27.01.2018
10:46:23
чтобы разный код на матчинг/конструкцию

Alexander
27.01.2018
10:48:28
так вот с помощью ТН можно было бы переводить у удобную форму ну или плагином

Index
27.01.2018
10:49:01
Плагином как ты себе это представляешь?

Alexander
27.01.2018
10:49:10
кстати у тебя через Here|There?

Index
27.01.2018
10:49:19
Да
Правда я их назвал This и That

Denis
27.01.2018
10:52:04

Index
27.01.2018
10:52:36
ну вон же в примере на матчинг preview, на конструкцию review

Denis
27.01.2018
10:53:13
В секции where как раз на конструкцию?

Index
27.01.2018
10:53:57
Да

Denis
27.01.2018
10:54:52
Ну по сути как то можно было заменить на Viewpatterns в матчинг

Index
27.01.2018
10:55:36
Там и есть ViewPatterns в синониме

Google

Denis
27.01.2018
10:56:01
Точно
Проглядел

Alexander
27.01.2018
11:19:05
ну viewpattern напрочь убивают exhaustiveness analysis
мне интересно возможно ли без большого количества indirection сеты делать
но вроде никак т.е. Int не индуктивный

Igor
27.01.2018
11:44:04
Третий день Хаскель ковыряю, и пока еще сильно плаваю. У меня вопрос: как по-человечески пишется что-то вроде mapM_ (\f -> readFile f >>= putStr) files?

Дмитрий
27.01.2018
11:44:53
https://t.me/haskell_learn

Igor
27.01.2018
11:46:24

Kirill
27.01.2018
11:50:29
не особо
а по вопросу вроде нормально "императивненько" записывается через forM_ files $ \f -> do{ contents <- readFile f; putStr contents}

Pineapple
27.01.2018
11:57:45
mapM (putStr <=< readFile) files

Антон
27.01.2018
11:58:34

Pineapple
27.01.2018
11:59:11
Да

Igor
27.01.2018
12:25:47
Из обоих чатов я понял, что forM_ + do привычнее. За <=< спасибо! Именно то, что искал.

Антон
27.01.2018
12:29:36
Линзы — да, вещь удобная, но, во-первых, требуют TH, во-вторых, ломают вывод типов
> с этим бывают проблемы, кстати. В развесистом линзокоде у меня такое бывало - сделал s/$/./ и перестало чекаться ибо стало слишком полиморфно
Есть пропозал для GHC разрешить do в позиции аргументов. В этом случае можно будет, в частности, отменить специальное правило типизации $

Aleksey
27.01.2018
12:31:24
TH необязателен - можно руками писать все линзы.
Вывод типов с линзами обычно работает наоборот: знаешь, что что-то эдакое в линзах можно, пишешь сигнатуру и дальше жогглируешь traversed и прочим, пока не соёдется :)

A64m
27.01.2018
12:33:45
отменить нельзя будет, никто код без $ переписывать не станет

Denis
27.01.2018
12:53:20

Leonid
27.01.2018
13:08:02
https://github.com/haskell/ecosystem-proposals/pull/6 чёт не холиварят

Google

Alexander
27.01.2018
13:13:07
наконец-то толково написали
хотя и перемудрили

Anatolii
27.01.2018
18:27:17
а ghcid не может поломаться из-за template-haskell?

Admin
ERROR: S client not available

Anatolii
27.01.2018
18:27:58
stack ghci нормально загружается
а ghcid игнорит 2 модуля с persistent декларациями
может -fno-code виновен?

Dmitry
27.01.2018
18:30:01

Anatolii
27.01.2018
18:42:11
ну я решил также проблему как в issue

Donat
27.01.2018
19:44:47
для ghc ничего вроде distcc ещё не придумали?

Alexander
27.01.2018
19:46:36
нет вроде

Donat
27.01.2018
19:50:05
нагуглил несколько очень древних постов в которых обсуждение затихло после пары постов
видимо, никто не осилил...

Евгений
27.01.2018
20:47:43
@qnikst выше

Alexander
27.01.2018
20:48:00
+

Антон
27.01.2018
21:27:30
Поругайте кот, пожалуйста:
shiftedZipWith f vec =
enumFromTo 0 (len-1)
& map index &&& map (index . (`rem` len) . (+1))
& uncurry (zipWith f)
where
len = V.length vec
index = (vec V.!)
shiftedSum = shiftedZipWith (+)
shiftedFSub = shiftedZipWith (flip (-))
polygonArea = curry $ (/2) . fromIntegral . abs . sum . uncurry (zipWith (*)) . (***) shiftedSum shiftedFSub

Aleksey
28.01.2018
04:27:13
Опять же, зачем flip (-), если можно сменить порядок прямо в shiftedZipWith, если уж для shiftedSum ничего не изменится (ибо (+) коммутативен)
Опять же & не то чтобы чаcто используется, гораздо чаще встречается $. Иначе слишком часто придётся менять направление чтения - композиция то читается справа-налево в той же polygonArea
shiftedZipWith f vec = V.zipWith f vec shiftedVec
where
shiftedVec = V.snoc (V.tail vec) (V.head vec)

Google

Yuriy
28.01.2018
05:53:07
(&) и flip — ерунда по сравнению с enumFromTo, (&&&) и uncurry. когда кто-то из них встречается, здесь, вероятно, что-то переусложнено

Denis
28.01.2018
08:27:51

Aminu Saleh
28.01.2018
10:22:39
Aslm

Антон
28.01.2018
10:29:37

Aleksey
28.01.2018
10:32:22
Нет конкатенации векторов, есть snoc
К тому же n запросов по индексу, это та же сложность, не?

Антон
28.01.2018
10:34:37

Aleksey
28.01.2018
10:35:54
Так zipWith все равно в обоих вариантах есть
В любом случае это не то место чтобы оптимизировать, да и не тот способ

Aminu Saleh
28.01.2018
10:38:32
Hello

? animufag ?
28.01.2018
10:46:15

Oleg
28.01.2018
12:40:51
Не знаю, пофиксили ли, но встречал и испытывал на себе, что uncurry не лучший выбор в плане для перфоманса иногда
https://stackoverflow.com/a/38440296/210905