Size: a a a

2020 December 25

cy

chjdg yhfs in Haskell Start
к слову есть группа js задачи с собеседований, интересно по хаскелу подобное есть?
источник

cy

chjdg yhfs in Haskell Start
сайт какой-нибудь с задачами?
источник

cy

chjdg yhfs in Haskell Start
в телеге то точно нету
источник

AY

Andrei Yangabishev in Haskell Start
Не понимаю ленивость хаскеля. Прохожу курс на степик и затык на $!

1. Сказано, что в первом аргументе mySum будут накапливаться отложенные вычисления? ПОЧЕМУ? Ведь мы используем $! который вроде бы говорит что аргумент функции должен быть вычислен окончательно, откуда там накопления? Или я не понимаю смысл слов "накапливаться"? Накапливаться отложенные это аккумулироваться или там будет цепочка thunk?
2. Я правильно понимаю что seq и $! сводит выражения к WHNF, т.е. редуцирует выражения до конструкторов? Зачем, почему конструкторы так важны, а все остальное нет? Почему останавливается? Конструкторы важны потому что нужно знать какие instance функции дергать?
источник

к

кана in Haskell Start
сам mySum вычисляет, что аргумент это кортеж, но значения внутри кортежа он не вычисляет

$! вычисляет кортеж до weak head normal form, то он вычисляет конструктор кортежа, но не значения внутри
источник

AY

Andrei Yangabishev in Haskell Start
А если мне надо до NF, то $!! ?
источник

к

кана in Haskell Start
f _ = 1
f undefined - ок, undefined не вычисляется
f $! undefined - упадет, $! вычисляет конструктор undefined, и падает

f (a, b) = 1
f undefined - упдает, потому f пытается вычислить undefined до кортежа
f $! undefined - упадет, потому что $! вычисляет undefined
f (undefined, undefined) - не упадает, потому что f матчит кортеж, а что внутри не важно
f $! (undefined, undefined) - не упадет, $! вычисляет конструктор, f матчит кортеж, все ок, что внутри не важно
источник

к

кана in Haskell Start
Andrei Yangabishev
А если мне надо до NF, то $!! ?
да
источник

AY

Andrei Yangabishev in Haskell Start
А почему так, почему WHNF только до головы вычисляется, в чем важность головы?
источник

к

кана in Haskell Start
Andrei Yangabishev
А почему так, почему WHNF только до головы вычисляется, в чем важность головы?
ну в этом суть whnf

полезно например чтобы вычислить что-то что можно сматчить, но не больше
источник

к

кана in Haskell Start
например

x = undefined : x

мы можем вычислить x до : и таким образом значит что там как минимум один элемент, но что внутри и что дальше - не важно. Как минимум там есть элемент, а не пустой список, или не ошибка

или там строгая дата, тогда вычисление до whnf это сразу и вычисление значений

числа как раз подходят
источник

к

кана in Haskell Start
data Tuple a b = Tuple !a !b

f (Tuple _ _) = 0

main = print $ f (Tuple undefined undefined)


например такой код упадет, хоть значений внутри нет, достаточно вычислить только голову Tuple, потому что поля строгие

f _ = 0
такой код не упадет

f _ = 0
а $! Tuple undefined undefined
такой уже снова упадет
источник

к

кана in Haskell Start
вычисление до головы часто значит что вычисление уже в принципе запущено, просто где-то остановилось, например с таким недавно я сталкивался в либе inline-js для запуска js кода, там пока не вычислишь результат хотя бы до whnf, он заблочит жс-тред, потому что хаскельная сторона вообще не потребила результат

а когда вычислил до whnf, то результат уже переехал на хаскельную сторону, и можно разблочить жс-тред и запускать новые жс-вычисления
источник

AY

Andrei Yangabishev in Haskell Start
А вот эти строгие поля они требует сведение аргументов до слабой формы? Или полного вычисления?
источник

к

кана in Haskell Start
до whnf
источник

AY

Andrei Yangabishev in Haskell Start
А вот еще картинка, я понять не могу, почему \x -> x + (abs 1) это HNF, а \x -> abs 1 это слабая форма?
источник

AY

Andrei Yangabishev in Haskell Start
Вроде и там и там голова известна.
источник

AY

Andrei Yangabishev in Haskell Start
Просто запутался. Вроде как HNF это головная форма, т.е. предполагается что известен конструктор и все отличие от WHNF в том, что в слабой форме аргументы не просчитываются и вроде как WHNF должна быть подмножеством головной формы, а все наоборот, WHNF более обширна.
источник

к

кана in Haskell Start
мб это поможет, я сам путаюсь в whnf и hnf

предпочитаю считать что существует только whnf и nf
источник

к

кана in Haskell Start
источник