Size: a a a

2017 December 07

I

Iseedeadpeople in Haskell Start
Всем привет. Небольшой нубский вопрос (если пошлёте смотреть видеокурсы в описании, я пойму), но мало ли.
Как адекватно перевести class constraint?
источник

e

egoarka in Haskell Start
ограничение накладываем на тип для класса
источник

I

Iseedeadpeople in Haskell Start
Действительно. Спасибо большое)
источник

VY

Vasiliy Yorkin in Haskell Start
хм, интересно почему в https://wiki.haskell.org/Foldr_Foldl_Foldl%27 не упоминается про foldr'
источник

VY

Vasiliy Yorkin in Haskell Start
мб он был добавлен позже, чем была написана эта статья
я думаю foldr' гораздо чаще пригождается, нежели foldl'
источник

ZK

Zheka Kozlov in Haskell Start
Просто он не особо нужен, наверное
источник

VY

Vasiliy Yorkin in Haskell Start
ну там такая аргументация за выбор foldl':

1) When the list to which it is applied is large, but definitely finite, you do not care about the implicit reversal, nd you seek to improve the performance of your code
2) When you actually do want to reverse the order of the list, in addition to possibly performing some other transformation to the elements
источник

VY

Vasiliy Yorkin in Haskell Start
т.е. foldr' позволяет избежать ограничения 1го пункта, а конкретно "you do not care about the implicit reversal", поэтому он вроде бы как должен находить больше примений (хотя не уверен, что можно такой вывод сделать)
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Вот даже сходу не придумаю, когда мне мог бы понадобиться строгий foldr
источник

VY

Vasiliy Yorkin in Haskell Start
foldTree :: [a] -> Tree a
foldTree = foldr' insert Leaf
источник

VY

Vasiliy Yorkin in Haskell Start
если очень много их
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Он же WNF возвращает сразу. Поэтому стогость тут от самого аккумулятора идёт
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
У foldl то понятно, это вызов себя + санк с отложенным примением операции. Тут есть что форсить.
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Если хочется энергично собрать дерево - зачем кстати? - то м.б. нужно просто строгое дерево?
источник

VY

Vasiliy Yorkin in Haskell Start
Aleksei (astynax) Pirogov
Вот даже сходу не придумаю, когда мне мог бы понадобиться строгий foldr
ну т.е. вот во всех тех же случаях, что и строгий foldl, только без implicit reversal
источник

VY

Vasiliy Yorkin in Haskell Start
Aleksei (astynax) Pirogov
Если хочется энергично собрать дерево - зачем кстати? - то м.б. нужно просто строгое дерево?
ну это надуманный пример (задачка из cis194), просто лень было придумывать нормальный кейс
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
foldr в других контекстах применяют же - стримы, вот это всё
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
нет никакого "неявного разворачивания". Список всегда с головы обходится
источник

VY

Vasiliy Yorkin in Haskell Start
а как же foldl' (flip (:)) []==reverse?
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Меняешь порядок операндов внутри функции свёртки и всё. Ибо если свёртки энергичные, то foldr' ~ foldl' с точностью до порядка аргументов функции сворачивания
источник