Entiendo la función seq y por qué es necesario introducir rigurosidad para la eficiencia. Lo que no entiendo es, ¿por qué se llama a esta primitiva seq(y no a algo estricto)?
haskell
lazy-evaluation
psquid
fuente
fuente

Respuestas:
TL; DR: Miranda lo llamó
seq, se introdujo cuandosequence(probablemente) ya era una cosa para las mónadas, y($!)se conocióstrictpor poco tiempo.Miranda fue primero
Se llama
seqporque se llamóseqen Miranda y en idiomas anteriores, al menos según A History of Haskell: Being Lazy With Class por Paul Hudak, John Hughes, Simon Peyton Jones y Philip Wadler .Tenga en cuenta que Turner solo introdujo los componentes estrictos en el documento de 1985 , no en
seqsí mismo, y el "manual Sasl NORMA" de Scheevel parece haberse perdido o al menos no está disponible en Internet. La tesis de Hughes ("Hughes, 1983" arriba) tampoco presentaseq.De cualquier manera,
seqera parte del entorno estándar de Mirandas y también contiene una pista de por qué se llamabaseq:La sincronización correcta o SEC uir.
Otros posibles nombres
Ahora, ¿por qué no se llamó simplemente
stricta Haskell? O inclusosequence?Bueno, resulta que Haskell 1.3 , que introdujo
seq, también introdujoMonad, y por lo tantosequence :: Monad m => [m a] -> m (). Por lo tanto,sequenceno estaba disponible como nombre.Ahora que
sequenceestaba fuera de la imagen, echemos un vistazostrict.strictse incluyó en 1.3, ya que 1.3 introdujo unaEvalclase de tipo :Ni
Evaltampocostricthicieron el corte en Haskell98 tal como está. En cambio,Evalse eliminó por completo, ya que se aplicaba a todos los tipos de cualquier manera, ystrictse le cambió el nombre($!).fuente
seq, y 1.3 tiene una.psversión adecuada y HTML a la mano. Si desea ver por qué se celebró la E / S monádica, busque el antiguo[Request] -> [Response]modelo de E / S. Ser perezoso con clase es probablemente el mejor recurso para mirar más allá, aparte de las viejas actas de las reuniones.