Entendo a função seq e por que é necessário introduzir rigor na eficiência. O que eu não entendo é: por que esse primitivo é chamado seq
(e não tem a ver com rigor)?
haskell
lazy-evaluation
psquid
fonte
fonte
Respostas:
TL; DR: Miranda chamou
seq
, foi introduzida quandosequence
(provavelmente) já era uma coisa da Monads e($!)
era conhecidastrict
por pouco tempo.Miranda foi a primeira
É chamado
seq
porque foi chamadoseq
em Miranda e nos idiomas anteriores, pelo menos de acordo com A History of Haskell: Being Lazy With Class de Paul Hudak, John Hughes, Simon Peyton Jones e Philip Wadler .Observe que Turner apenas introduziu os componentes estritos no artigo de 1985 , e não o
seq
próprio, e o "manual NORMA Sasl" de Scheevel parece estar perdido ou pelo menos não disponível na Internet. A tese de Hughes ("Hughes, 1983" acima) também não é apresentadaseq
.De qualquer forma,
seq
fazia parte do ambiente padrão do Mirandas e também contém uma dica de por que foi chamadoseq
:Sincronização correta ou seq uencing.
Outros nomes possíveis
Agora, por que isso simplesmente não foi chamado
strict
em Haskell? Ou mesmosequence
?Bem, acontece que Haskell 1.3 , que introduziu
seq
, também introduziuMonad
, e assimsequence :: Monad m => [m a] -> m ()
. Portanto,sequence
não estava disponível como um nome.Agora que
sequence
estava fora de cena, vamos dar uma olhadastrict
.strict
foi incluído no 1.3, já que o 1.3 introduziu umaEval
classe de tipo :Nem
Eval
nemstrict
fez o corte em Haskell98 como está. Em vez disso,Eval
foi completamente removido, pois se aplicava a todos os tipos de qualquer maneira estrict
foi renomeado para($!)
.fonte
seq
e o 1.3 possuem uma.ps
versão adequada e HTML à mão. Se você quiser ver por que a E / S monádica foi celebrada, procure o[Request] -> [Response]
modelo de E / S antigo . Ser preguiçoso com a classe provavelmente é o melhor recurso para procurar além, além das antigas atas das reuniões.