LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

я правильно понял, что проблема аж sequence

Да

liftM sum . replicateM n
==
                 replicateM n
            ~~~~~~~~~~~~~~~~~~~~~~
liftM sum . sequence . replicate n
~~~~~~~~~~~~~~~~~~~~
        sumM
==
sumM . replicate n

падают, тогда как sumM . replicate n при sumM через хвостовой foldM в обход replicate — работает.

http://comments.gmane.org/gmane.comp.lang.haskell.libraries/20113

что примечательно разницы между foldl и foldl' не будет

Разницы между foldl/foldl' на числах и sum/sum' в частности нет начиная с -O1 — видно, что много всего происходит в -ddump-simpl-stats, так что в итоге -ddump-simpl идентичны (с точностью до gensym-ов). Как и bang-patterns при оптимизациях часто не нужны (в base, например, не особо их видно).

Исправление quasimoto, :

я правильно понял, что проблема аж sequence

Да

liftM sum . replicateM n
==
                 replicateM n
            ~~~~~~~~~~~~~~~~~~~~~~
liftM sum . sequence . replicate n
~~~~~~~~~~~~~~~~~~~~
        sumM

падают, тогда как sumM . replicate n при sumM через хвостовой foldM в обход replicate — работает.

http://comments.gmane.org/gmane.comp.lang.haskell.libraries/20113

что примечательно разницы между foldl и foldl' не будет

Разницы между foldl/foldl' на числах и sum/sum' в частности нет начиная с -O1 — видно, что много всего происходит в -ddump-simpl-stats, так что в итоге -ddump-simpl идентичны (с точностью до gensym-ов). Как и bang-patterns при оптимизациях часто не нужны (в base, например, не особо их видно).

Исходная версия quasimoto, :

я правильно понял, что проблема аж sequence

Да

liftM sum . replicateM n
==
                 replicateM n
            ~~~~~~~~~~~~~~~~~~~~~~
liftM sum . sequence . replicate n
~~~~~~~~~~~~~~~~~~~~
        sumM

падают, тогда как sumM . replicate n при sumM через хвостовой foldM в обход replicate — работает.

http://comments.gmane.org/gmane.comp.lang.haskell.libraries/20113

что примечательно разницы между foldl и foldl' не будет

Разницы между foldl/foldl' на числах и sum/sum' в частности нет начиная с -O1 — видно, что много всего происходит в -ddump-simpl-stats, так что в итоге -ddump-simpl идентичны (с точностью до gensym-ов). Как и bang-patterns при оптимизациях часто не нужны (в base, например, не особо их видно).