Wie unterscheidet sich Haskells 'seq' von anderen Funktionen?

Ich bin verwirrt über die Beschreibung, wie Haskellsseq arbeitet in einem Tutorial lese ich.

Das Tutorial besagt, dass

Auswertung des Ausdrucksseq x y wertet zuerst @ ax zu WHNF und erst dann mit der Auswertung von @ fortfahry

Bei der Erklärung, wie Haskells Lazy Evaluation im Allgemeinen funktioniert, heißt es in demselben Tutorial, dass bei der Evaluierung einer Funktion Argumente "evaluiert werden, aber nur so weit wie nötig", was bedeutet, dass ihre

arguments werden von links nach rechts ausgewertet, bis ihre obersten Knoten Konstruktoren sind, die mit dem Muster übereinstimmen. Wenn das Muster eine einfache Variable ist, wird das Argument nicht ausgewertet. Wenn das Muster ein Konstruktor ist, bedeutet dies eine Auswertung nach WHNF.

Diese Beschreibung der Funktionsbewertung im Allgemeinen scheint sich nicht von der Beschreibung für @ zu unterscheideseq. Beide - in meiner Anfängerlesung - reduzieren nur ihr erstes Argument auf WHNF.

Ist das korrekt? Wie istseq unterscheidet sich - insbesondere in der Art und Weise, wie es sein erstes Argument verarbeitet - von jeder anderen Haskell-Funktion?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage