
IC
18.05.2018
14:02:07

Dmitry
18.05.2018
14:04:20

Ilya
18.05.2018
14:07:35

Denis
18.05.2018
14:09:53
ну раз так
liftA2 (liftA2 (zipWith (+))) pure tailMay

Google

Dmitry
18.05.2018
14:09:54
А если надо из следующего вычитать предыдущий? Я не хочу спорить. И сам tail наверное напишу. А потом на drop исправлю :-)

Denis
18.05.2018
14:11:08

Ilya
18.05.2018
14:11:19
про drop 1 вместо tail лучше вообще забудь

Dmitry
18.05.2018
14:12:33
а в чем причина, почему это так серьезно?
А что, если не вычитание, а другая некоммутативная операция?

Denis
18.05.2018
14:13:28

Ilya
18.05.2018
14:13:30

Denis
18.05.2018
14:14:34

Александр
18.05.2018
14:15:11
В копилку "на забывание": в разных источниках рекомендуется разное по поводу foldr, foldl и foldl'. Кажется, все из них сходятся, что foldl не стоит использовать, а насчет foldr и foldl' мнения расходятся.

Ilya
18.05.2018
14:15:44
бектики
а, просто чужой синтаксис выглядит синим, а свой зеленым

Denis
18.05.2018
14:16:00

Google

Denis
18.05.2018
14:16:45

Pineapple
18.05.2018
14:16:50

Ilya
18.05.2018
14:19:54
А чем плох drop 1?
это попытка сделать tail "безопасным", пожертвовав инъективностью функции, то есть drop 1 [] == drop 1 [x]
Думаю можно придумать конкретных примеров, где это будет приводить к проблемам, но мне и этого общего соображения достаточно

Pineapple
18.05.2018
14:21:17
Не думаю, что потеря инъективности является проблемой

Dmitry
18.05.2018
14:24:04
tail [x] == tail [y]

Alister
18.05.2018
14:25:45

Ilya
18.05.2018
14:25:47
tail [x] == tail [y]
да, не совсем строго выразился. но думаю меня поняли. В любом случае продолжаю считать drop 1 плохой идеей

IC
18.05.2018
14:26:13

? animufag ?
18.05.2018
14:26:48
ребят, есть линза Lens' a b и есть функция b -> Lens' a c из этого же можно как-то получить Lens' a c ?

Denis
18.05.2018
14:27:10

Александр
18.05.2018
14:27:29
Не думаю, что потеря инъективности является проблемой
Согласен. Когда пишешь реальный код на Haskell, вообще не думаешь ни о чем таком. Просто пишешь код с инвариантами, и все.
Большей проблемой, пожалуй, будет манипуляция со списками как таковыми. Потребности дропнуть что-то у меня пока не возникало. Да и вообще, предпочитаю деконструировать или фолдить

Pineapple
18.05.2018
14:28:51
+ если надо различать [] и [_], то есть паттертматчинг

Denis
18.05.2018
14:29:21

Dmitry
18.05.2018
14:29:25
Кстати, а что если в zipWith f x (tail x) функция вдруг неленивая?

Alexander
18.05.2018
14:29:53
то ничего страшного

Ilya
18.05.2018
14:29:59

Dmitry
18.05.2018
14:30:12
да, сообразил уже :-)
по делу не прицепиться :-)

Alexander
18.05.2018
14:32:24
про drop 1 неочевидно, что выдача [] на пустом списке и на [x] лучше чем выдача исключения на пустом
но вообще drop 1 вместо tail - вполне себе хорошая идея

Google

Yuriy
18.05.2018
14:37:33

? animufag ?
18.05.2018
14:38:46
btolac?

Yuriy
18.05.2018
14:39:12

? animufag ?
18.05.2018
14:40:26
аа понял нотацию

Yuriy
18.05.2018
14:40:43
lac :: Lens' a b -> (b -> Lens' a c) -> Lens' a c
lac lab btolac = lens
(\a -> let b = a ^. lab in a ^. btolac b)
(\a c -> let b = a ^. lab in a & btolac b .~ c)
но вообще ты хочешь странного
я не могу придумать этому адекватное имя
подозреваю, что тебе такая линза не нужна на самом деле

? animufag ?
18.05.2018
14:43:40
внутри стейта есть поле по которому я выбираю выбираю запись из хешмапа из этого же стейта
тип звучит странно - ведь вроде бы это поле статично отношсительно хешмапа
но в стейте в разное время меняются это поле и хешмап
ох вау
типы сошлись

Alexander
18.05.2018
14:46:26
говори правильно - натянулись

? animufag ?
18.05.2018
14:46:30
это кажется невероятным когда скопипастил
да да
выелетело слово из головы

Ilya
18.05.2018
14:47:40

Alexander
18.05.2018
14:47:53
x !! 0 это не тоже самое

Ilya
18.05.2018
14:48:18
попытка рулить списком через индексы

Google

Alexander
18.05.2018
14:48:21
т.е. x !! 0 и head x обладают одними свойствами
drop 1 и tail разными

Ilya
18.05.2018
14:50:03
drop 1 и tail разными
пока не увидел ни одного примера, где это пригодилось бы. пытались натянуть на zipWith, но не вышло.
а многие так могут писать, просто перенося 1-в-1 питоновский стиль, даже не задумываясь о "разных свойствах". я об этом.

Alexander
18.05.2018
14:50:45
везде где f [] -> [] нормальное преобразование

Ilya
18.05.2018
14:50:58

Alexander
18.05.2018
14:53:16
ag "drop 1"
libraries/<censored>/src/AS/Json.hs
36:optionsDrop1 = defaultOptions { fieldLabelModifier = drop 1 }
мне казалось ещё где-то было
tail чаще применяется
4 hfpf
раза

Антон
18.05.2018
15:01:36
В копилку "на забывание": в разных источниках рекомендуется разное по поводу foldr, foldl и foldl'. Кажется, все из них сходятся, что foldl не стоит использовать, а насчет foldr и foldl' мнения расходятся.
Так, кхм, вроде ж ясно — если свёртка в скаляр, то foldl', если свёртка функцией, которая может вернуть результат, не вычисляя второй аргумент — foldr

Alexander
18.05.2018
15:02:44
строгая функция foldl', ленивая по второму агрументу foldr
при желании через foldr выражается все

Denis
18.05.2018
15:04:04

Антон
18.05.2018
15:04:07

Alexander
18.05.2018
15:04:37
ну map то в первую очередь через него выражается
> "map" [~1] forall f xs. map f xs = build (\c n -> foldr (mapFB c f) n xs)
собственно через него map и выражен

adam
18.05.2018
15:31:22

Google

Alexander
18.05.2018
15:31:47
если что это хорошее упражнение
Data.List переписать в терминах foldr

Denis
18.05.2018
15:32:04
катой их, катой

Denis
18.05.2018
15:32:26
кого-то катоем обозвали

adam
18.05.2018
15:32:27
Да вроде есть такая ката уже

Denis
18.05.2018
15:32:50

Антон
18.05.2018
15:34:32
И вообще, рекурсивные схемы — вещь полезная, но малость мозг выносят

Denis
18.05.2018
15:35:19
ну и https://github.com/Lysxia/generic-recursion-schemes

Alexander
18.05.2018
15:36:30

IC
18.05.2018
15:36:33
обычные схемки сами умеют дерайвить без этого всего

Denis
18.05.2018
15:36:49

Антон
18.05.2018
15:39:34

IC
18.05.2018
15:39:43
https://hackage.haskell.org/package/supermonad
are those... superpipes?

Denis
18.05.2018
15:40:32

Антон
18.05.2018
15:42:20

Alexander
18.05.2018
15:47:36
fmap mappend . sequence есть же что-то готовое для этого?