@haskellru

Страница 1208 из 1551
Dmitry
18.05.2018
14:04:20
λ> let x = [] λ> zipWith (+) x (tail x) []
Согласен. Но если порядок аргументов поменяется, то упадет

Ilya
18.05.2018
14:07:35
Согласен. Но если порядок аргументов поменяется, то упадет
вот и не надо его менять:) zip x (tail x) это вообще классика

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

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

Dmitry
18.05.2018
14:12:33
а в чем причина, почему это так серьезно?

А что, если не вычитание, а другая некоммутативная операция?

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
бектики
а, просто чужой синтаксис выглядит синим, а свой зеленым

Google
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
про drop 1 вместо tail лучше вообще забудь
Не забудь, а вспоминай каждый раз какую задачу ты решаешь.

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

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

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

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

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

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
ребят, есть линза Lens' a b и есть функция b -> Lens' a c из этого же можно как-то получить Lens' a c ?
например, 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:38:46
btolac?

Yuriy
18.05.2018
14:39:12
btolac?
btolac :: b -> Lens' a c

? 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
но вообще drop 1 вместо tail - вполне себе хорошая идея
а x !! 0 вместо head x как тебе?:) Это ровно тот же самый стиль, если что. Немного отдаёт питончиком (я сам на питоне пишу, так что знаю)

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 [] -> [] нормальное преобразование

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 выражается все

Антон
18.05.2018
15:04:07
при желании через foldr выражается все
Это да, и map в том числе. Производительность только аховая может быть

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
при желании через foldr выражается все
Если что, то это уже метаморфичная парадигма

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
я про cata
Слишком generic

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

Denis
18.05.2018
15:35:19
Слишком generic
дерайвь их https://hackage.haskell.org/package/catamorphism

ну и https://github.com/Lysxia/generic-recursion-schemes

Alexander
18.05.2018
15:36:30
я про cata
это следующее упражнение

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
https://hackage.haskell.org/package/supermonad are those... superpipes?
я пейпер помню про супермонаду)

О, кинь ссылку, плиз
https://www.codewars.com/kata/folding-through-a-fixed-point

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

Страница 1208 из 1551