Что означает seq в haskell

Я новичок в Haskell, и только что пришел в ленивый мир программирования. Я читал, что seq Функция очень особенная, потому что она заставляет использовать строгую оценку, чтобы быть более эффективной в некоторых случаях. Но я просто не могу найти что seq стоять буквально. Может быть, строгая оценка Q*???

2 ответа

Решение

seq оценивает свой первый аргумент перед возвратом второго. Это обычно вводится для улучшения производительности, избегая ненужной лени. Это вызывает оценку функции.

seq :: a -> b -> b
seq _ y = y

из prelude.hs

Это определение функции обернуто в #ifdef __HADDOCK__ поэтому он будет скомпилирован только пикшой (инструментом документации), а не самим компилятором! "Настоящий" seq определен в GHC.Prim как

seq :: a -> b -> b; 
seq = let x = x in x. 

Это всего лишь фиктивное определение. В основном, seq специально синтаксис обрабатывается, в частности, компилятором. Вы написали "seq оценивает свой первый аргумент" - но первое определение, очевидно, этого не делает.

через user2407038

Больше читать:

Он должен напоминать вам "последовательно" или "последовательность", потому что он позволяет программисту определять последовательность вычисления своих аргументов.

Другие вопросы по тегам