Что означает 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
Больше читать:
Он должен напоминать вам "последовательно" или "последовательность", потому что он позволяет программисту определять последовательность вычисления своих аргументов.