В документации для scanl говорится, что "эта функция будет сливаться". Что здесь означает предохранитель? Это плохо?
Что означает "эта функция будет сливаться"?
Ответ 1
http://www.haskell.org/haskellwiki/Short_cut_fusion
(и, для получения дополнительной информации: http://www.haskell.org/haskellwiki/Correctness_of_short_cut_fusion)
Если функция сработает, это хорошо. Это означает, что цепочка функций может быть объединена в одну функцию, что означает меньшее распределение, меньше стека и больше скорости! Отлично!
Здесь тривиальное слияние: map f . map g
---- > map (f . g)
.
Как указано выше, есть много других, которые также применяются в правилах стандартной библиотеки.
Ответ 2
Это похоже на сопрограммы - если вы создаете две функции, которые они могут выполнять на конденсированном потоке, а не один, который сначала "оценивается", а затем второй.
Ответ 3
Я бы предположил, что это относится к методам оптимизации слияния потоков и заявляет, что они могут применяться к функции. По сути, если у вас есть две функции, которые преобразуют последовательности, оптимизатор будет объединять преобразования вместе, поэтому требуется только один обход.
Короче, нет, это не плохо. Совершенно противоположное!