Size: a a a

2021 February 18

JS

Jerzy Syrowiecki in Haskell Start
Denis Gabidullin
@cblp_su @kana_sama
А вы какой конкретно код проверяли? И как?
Странно, что у вас получились разные результаты)
код из вопроса в ghci с помощью Debug.Trace
источник

JS

Jerzy Syrowiecki in Haskell Start
Yan Shkurinskiy
тут кстати без оптимизаций кмк возможна ситуация что два раза будет
да, я как раз это и утверждаю
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
да, я как раз это и утверждаю
я просто в голове прокрутил что будут оптимизации)
источник

JS

Jerzy Syrowiecki in Haskell Start
Yan Shkurinskiy
оно же в один кейс выйдет?
один кейс, но с двумя аппликациями f a
источник

JS

Jerzy Syrowiecki in Haskell Start
на оптимизации надейся, но сам не плошай
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
один кейс, но с двумя аппликациями f a
кмк тут вопрос в том, будет ли это выносится в топлевел
источник

JS

Jerzy Syrowiecki in Haskell Start
на CSE лучше не рассчитывать
источник

к

кана in Haskell Start
проверил еще вот такой код, и он тоже вызывает только один раз
источник

к

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

к

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

к

кана in Haskell Start
могу предположить что @cblp_su проверял в репле
источник

YS

Yan Shkurinskiy in Haskell Start
если вынесится (не вынесится кмк только при  -O0) - то должно один раз посчитаться
источник

к

кана in Haskell Start
там оптимизации не применяются
источник

YS

Yan Shkurinskiy in Haskell Start
кана
могу предположить что @cblp_su проверял в репле
он так и сказал
источник

YS

Yan Shkurinskiy in Haskell Start
а может не вынестить потому что есть e аргумент
источник

JS

Jerzy Syrowiecki in Haskell Start
кана
могу предположить что @cblp_su проверял в репле
да, ghci + trace для проверки количества вызовов
источник

YS

Yan Shkurinskiy in Haskell Start
Yan Shkurinskiy
а может не вынестить потому что есть e аргумент
теоретиески если бы запись была с последним e, и если бы записали в теле только f и a - то могло бы вызываться один раз и без оптимизаций
источник

YS

Yan Shkurinskiy in Haskell Start
я такие фокусы видел с фибоначчи
источник

к

кана in Haskell Start
кана
там оптимизации не применяются
собственно вот, в репле h (Just 1) вызовет f два раза, а если сбилдить (там по дефолту -O1) то будет один раз
источник

YS

Yan Shkurinskiy in Haskell Start
а можно эксперимент? (пока сам не могу повторить)  

fallRight :: a -> (a -> Maybe b) -> e -> Either e b 
fallRight a f
 | Nothing <- fa = Left
 | Just b  <- fa = const(Right b)
 where fa = f a

(вроде не бред написал)

Попробовать такое без оптимизаций
источник