Strictness without ordering, or confusion

From HaskellWiki
Revision as of 02:08, 20 September 2024 by Atravers (talk | contribs) (Replacement reference to "seq" page, other minor changes)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Prelude.seq :: a -> b -> b is non-sequential: the Haskell 2010 Report does not specify any order of evaluation with respect to its parameters. Hence the use of the name "seq" is a misnomer.

Introduce the primitive amid, with the same (Haskell 2010 Report) requirements:

         infixr 0 `amid`
         primtive amid :: a -> b -> b

         infixr 0 $!
         ($!) :: (a -> b) -> a -> b
         f $! x =  x `amid` f x

This frees the name "seq" for use with a new primitive definition, analogous to GHC's Control.Parallel.pseq, but not restricted to parallel programming.

If needed, "amidst" is one alternate basename for the deepseq library and its definitions.

Atravers 01:17, 7 January 2019 (UTC)