Size: a a a

2020 December 15

к

кана in Haskell
но думаю это было бы сделано наименее удобным образом и с какими-нибудь ограничениями, которые бы всю идею свели бы на нет
источник

MK

Maxim Koltsov in Haskell
Так есть же пропозал про все эти HasField
источник

MK

Maxim Koltsov in Haskell
Там в какой-то момент линзовую сигнатуру предлагали
источник

к

кана in Haskell
ну вот HasField хороший пример, там же без полиморфизма

когда вроде сделали, но так, что лучше бы не делали
источник

MK

Maxim Koltsov in Haskell
Подробности клапауций пусть расскажет
источник

к

кана in Haskell
то есть нельзя поменять тип поля для
data X a = X { a :: a }
источник

MK

Maxim Koltsov in Haskell
Ага
источник

K

Kir in Haskell
Вместо этого будет DotRecordField. А жаль, линзы искаропки бы не помешали. RankNTypes правда, пришлось бы внести как неотключаемое для этого
источник

R

Roman in Haskell
Alexander Vershilov
как сделать [a] -> [(a,Bool)] , так чтобы false у последнего эл-та
zip x ((const True <$> drop 1 x)++[False])

но можно лучше?
источник

AV

Alexander Vershilov in Haskell
Там же сразу по куску кода видно что оно будет ломаться при разном порядке вычисления (хотя читаю дальше)
источник

R

Roman in Haskell
Alexander Vershilov
Там же сразу по куску кода видно что оно будет ломаться при разном порядке вычисления (хотя читаю дальше)
ну я попытался это замаскировать в целях сторителлинга
источник

AV

Alexander Vershilov in Haskell
Хотел сказать про spine strict а уже сказано: Hence we have to explicitly force the spine to get the right result.
источник

AV

Alexander Vershilov in Haskell
Не согласен я с тем, что ленившись нарушает законы, во всяком случае тут. У нас результат зависит от времени выполнения/порядка выполнения
источник

AV

Alexander Vershilov in Haskell
В общем у нас есть тут зависимость по данным (значение зависит от конструктора), а мы её потеряли
источник

AV

Alexander Vershilov in Haskell
А если эмулировать ленивость, то нужно IORef на элемент, а то мне кажется тут можно получить что-нибудь странное типа True,False,True
источник

R

Roman in Haskell
Alexander Vershilov
Не согласен я с тем, что ленившись нарушает законы, во всяком случае тут. У нас результат зависит от времени выполнения/порядка выполнения
ну

1. я там написал  "lastIsFalse is particularly bad, because its value depends on how that value is consumed"
2. ленивость нарушает законы и без этого, там пара ссылок в конце
источник

R

Roman in Haskell
Alexander Vershilov
А если эмулировать ленивость, то нужно IORef на элемент, а то мне кажется тут можно получить что-нибудь странное типа True,False,True
у меня была такая версия, кажется. Энивей, тут можно получить странное False,False,False, если неправильно список потреблять. Другая альтернатива — потреблять правильно, тогда не получишь
источник

AV

Alexander Vershilov in Haskell
xs !! 5 seq (show (take 5 xs)) что скажет кстати?
источник

AV

Alexander Vershilov in Haskell
Roman
у меня была такая версия, кажется. Энивей, тут можно получить странное False,False,False, если неправильно список потреблять. Другая альтернатива — потреблять правильно, тогда не получишь
Чтобы было ок нужна явная зависимость по данным, тогда не сломаешь но можно зациклиться
источник

R

Roman in Haskell
Alexander Vershilov
xs !! 5 seq (show (take 5 xs)) что скажет кстати?
-- >>> let xs = lastIsFalse
-- >>> (xs !! 5) `seq` (show (take 5 xs))
-- "[True,True,True,True,True]"
источник