Size: a a a

2021 June 18

IK

Ilya Kos in Haskell
Я думал скорее про какой-нибудь С++
источник

к

кана in Haskell
а я в принципе про самый обобщенный цикл, который можно как while (true) представить, и условия выхода уже внутри как угодно в любом месте писать
источник

IK

Ilya Kos in Haskell
Хотя возможно и в него такое завезли
источник

IK

Ilya Kos in Haskell
Мне кажется, там появляются дополнительный corner cases, типо того, будет ли цикл исполнен ещё раз после выполнения условия.
источник

IK

Ilya Kos in Haskell
Об этом надо думать
источник

IK

Ilya Kos in Haskell
С рекурсией лично мне о таком думать не приходится
источник

IK

Ilya Kos in Haskell
Я прямо пишу что в каком кейсе происходит
источник

IK

Ilya Kos in Haskell
И не надо моделировать комбинации переменных в голове и думать, будет ли выполнен код
источник

IK

Ilya Kos in Haskell
Короче ИМХО рекурсия когнитивно проще циклов
источник

к

кана in Haskell
про комбинации переменных точно так же придется думать и в хвостовой рекурсии, если эти самые переменные вводить
источник

к

кана in Haskell
если мы в равных условиях, то состояние меняется и там и там в момент переключлючения итерации
источник

к

кана in Haskell
еще раз, я говорю не про схожесть, я говорю про ПОЛНУЮ одинаковость кода через безусловный цикл и хвостовую рекурсию в одинаковых условиях
источник

к

кана in Haskell
с разницей только синтаксической
источник

IK

Ilya Kos in Haskell
Да, но в случае рекурсии часть состояния управляется автоматически при помощи стека вызовов — программисту стек вызовов руками дергать не надо. А в циклах у тебя все состоящие трогает сам программист.
источник

к

кана in Haskell
ну, тут спорно, не вижу существенной разницы между установкой состояния через

f(a + b, b)
и
(a, b) = (a + b, b)
источник

MK

Maxim Koltsov in Haskell
У тебя хаскель головного мозга
источник

к

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

к

кана in Haskell
ну и я понял почему так выходит, потому что Codensity Reader это

forall r. (a -> (s -> r)) -> s -> r
~
s -> forall r. ((a, s) -> r) -> r
~
s -> (a, s)

так как это
forall r. ((a, s) -> r) -> r
по сути является континуейшен-вариантом
(a, s)

и для трансформер варианте

forall r. (a -> (s -> m r)) -> s -> m r
~
s -> forall r. (a -> (s -> m r)) -> m r
~
s -> forall r. ((a, s) -> m r) -> m r
~ [ вот тут интересно, (forall r. (a -> m r) -> m r) ~ m a ]
s -> m (a, s)

https://gist.github.com/kana-sama/8d34edb624e0630ff19b6ad90d987e43
источник

к

кана in Haskell
тогда вопрос, а зачем вообще писать через Codensity + Reader если можно сразу в State писать, @effectfully
источник

к

кана in Haskell
чтобы в простых случаях использовать просто Reader и иметь меньше шансов на ошибку с неправильным стейтом?
источник