Pourquoi est-seq mauvais?

Haskell a une fonction magique nommé seq, qui prend un argument de n'importe quel type et le réduit à la Faiblesse de la Tête à la Forme Normale de (WHNF).

J'ai lu un couple de sources [pas que je peux me rappeler qui ils étaient maintenant...] qui affirment que "polymorphe seq est mauvais". En quoi sont-ils des "mauvais"?

De même, il est le rnf fonction, ce qui réduit un argument pour Forme Normale (NF). Mais ce est une méthode de classe; il ne fonctionne pas pour les types arbitraires. Il semble "évident" pour moi, que l'on pourrait modifier le langage de spécification pour fournir ce qu'un primitif, semblable à seq. Cela, sans doute, serait "encore plus mauvais" que d'avoir seq. En quoi est-ce donc?

Enfin, quelqu'un a suggéré que le fait de donner seq, rnf, par et similaires du même type que la id fonction, plutôt que de la const fonction comme il est maintenant, serait une amélioration. Comment donc?

  • Le seq fonction n'est pas lambda définissable (j'.r., ne peut pas être défini dans le lambda-calcul), ce qui signifie que tous les résultats de lambda calcul ne peut plus faire confiance quand nous avons seq.