Size: a a a

2021 February 18

JS

Jerzy Syrowiecki in Haskell Start
Yan Shkurinskiy
Оно будет вычислено один раз в обоих случаях
почему? я не уверен
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
почему? я не уверен
оно же в один кейс выйдет?
источник

YS

Yan Shkurinskiy in Haskell Start
в коре
источник

АК

Анатолий Кот... in Haskell Start
кана
case Nothing of { Nothing -> 0; _ }

должен будет схлопнуться оптимизаций до

0

так что наверное по итогу будет все одинаково
Запоминание значения в паттерне происходит всегда или это оптимизация для каких-то конкретных случаев?
Те, к примеру, если у меня будут чуть более сложные матчинги, вроде:

Nothing <- f a = do dis
Right a <- g (f a) = do dat
Blah <- someExprg (f a) (g . f $ a) = do smth
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
почему? я не уверен
ну то есть - будет реально что-то типа case f a of?
источник

YS

Yan Shkurinskiy in Haskell Start
я почему уверен что будет так, отсюда и вывод
источник

к

кана in Haskell Start
я советую самому проверить

cabal build --ghc-options "-ddump-simpl -ddump-to-file -dsuppress-all"

выкидывает core в

dist-newstyle/build/x86_64-osx/ghc-8.10.4/haskell-playground-0.1.0.0/x/haskell-playground-exe/build/haskell-playground-exe/haskell-playground-exe-tmp/app/Main.dump-simpl

в моем случае
источник

АК

Анатолий Кот... in Haskell Start
кана
я советую самому проверить

cabal build --ghc-options "-ddump-simpl -ddump-to-file -dsuppress-all"

выкидывает core в

dist-newstyle/build/x86_64-osx/ghc-8.10.4/haskell-playground-0.1.0.0/x/haskell-playground-exe/build/haskell-playground-exe/haskell-playground-exe-tmp/app/Main.dump-simpl

в моем случае
спасибо, посмотрю
источник

к

кана in Haskell Start
вот какую штуку нужно запилить, веб-страничку, в которую пишешь код и сразу же видешь core с выкинутой из него мета-инфой
источник

АК

Анатолий Кот... in Haskell Start
но меня скорее интересовало если общее правило, тк если его нет, то так наверное лучше не писать
источник

JS

Jerzy Syrowiecki in Haskell Start
Анатолий Кот
Добрый день, есть ли разница между
fallRight :: a -> e -> (a -> Maybe b) -> Either e b 
fallRight a e f | Nothing <- f a = Left e
fallRight a e f | Just b  <- f a = Right b

и таким же кодом записанным через
fallRight a e f = case f a of …


тв будет ли f a в первом случае вычисленно единожды или по разу на каждый кейс?
проверил. в первом случае f вызывается 2 раза
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
проверил. в первом случае f вызывается 2 раза
а какие оптимизации?
источник

JS

Jerzy Syrowiecki in Haskell Start
Yan Shkurinskiy
а какие оптимизации?
в ghci. конечно, CSE должен спасать, но ему нельзя верить
источник

АК

Анатолий Кот... in Haskell Start
Jerzy Syrowiecki
проверил. в первом случае f вызывается 2 раза
жаль, с эстетической точки зрения мне вариант без кейса больше нравился\
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
в ghci. конечно, CSE должен спасать, но ему нельзя верить
что такое CSE?
источник

JS

Jerzy Syrowiecki in Haskell Start
Анатолий Кот
жаль, с эстетической точки зрения мне вариант без кейса больше нравился\
fallRight a e f
 | Nothing <- fa = Left e
 | Just b  <- fa = Right b
 where fa = f a
источник

JS

Jerzy Syrowiecki in Haskell Start
Yan Shkurinskiy
что такое CSE?
оптимизация common subexpression elimination, которая несколько вхождений f a объединит (или нет)
источник

YS

Yan Shkurinskiy in Haskell Start
Jerzy Syrowiecki
fallRight a e f
 | Nothing <- fa = Left e
 | Just b  <- fa = Right b
 where fa = f a
тут кстати без оптимизаций кмк возможна ситуация что два раза будет
источник

DG

Denis Gabidullin in Haskell Start
@cblp_su @kana_sama
А вы какой конкретно код проверяли? И как?
Странно, что у вас получились разные результаты)
источник

DG

Denis Gabidullin in Haskell Start
@kana_sama
Ты выше писал код, увидел. Сорян)
источник