seq -package
Evaluates its first argument to head normal form, and then returns its second argument as the result.
Evaluate each action in the sequence from left to right, and collect the results.
Evaluate each action in the sequence from left to right, and ignore the results.
Evaluate each monadic action in the structure from left to right, and ignore the results.
Evaluate each action in the structure from left to right, and ignore the results.
Sequential strategies provide ways to compositionally specify the degree of evaluation of a data type between the extremes of no evaluation and full evaluation. Sequential strategies may be viewed as complimentary to the parallel ones (see module Control.Parallel.Strategies).
General purpose finite sequences. Apart from being finite and having strict operations, sequences also differ from lists in supporting a wider variety of operations efficiently.
An amortized running time is given for each operation, with n referring to the length of the sequence and i being the integral index used by some operations. These bounds hold even in a persistent (shared) setting.
The implementation uses 2-3 finger trees annotated with sizes, as described in section 4.2 of
* Ralf Hinze and Ross Paterson, "Finger trees: a simple general-purpose data structure", Journal of Functional Programming 16:2 (2006) pp 197-217. http://www.soi.city.ac.uk/~ross/papers/FingerTree.html
Note: Many of these operations have the same names as similar operations on lists in the Prelude. The ambiguity may be resolved using either qualification or the hiding clause.
General-purpose finite sequences.
Evaluate the elements of an array according to the given strategy. Evaluation of the array bounds may be triggered as a side effect.
Evaluate the bounds of an array according to the given strategy.
Evaluate the elements of a foldable data structure according to the given strategy.
Evaluate each element of a list according to the given strategy. This function is a specialisation of seqFoldable to lists.
Evaluate the first n elements of a list according to the given strategy.
Evaluate the nth element of a list (if there is such) according to the given strategy. The spine of the list up to the nth element is evaluated as a side effect.
Evaluate the keys and values of a map according to the given strategies.
a name for Control.Seq.Strategy, for documetnation only.
The subsequences function returns the list of all subsequences of the argument.
> subsequences "abc" == ["","a","b","ab","c","ac","bc","abc"]
> { [ 1 ,2 .. 10 ] }
This module provides an overloaded function, deepseq, for fully evaluating data structures (that is, evaluating to "Normal Form").
A typical use is to prevent resource leaks in lazy IO programs, by forcing all characters from a file to be read. For example:
> import System.IO
> import Control.DeepSeq
>
> main = do
> h <- openFile "f" ReadMode
> s <- hGetContents h
> s `deepseq` hClose h
> return s
deepseq differs from seq as it traverses data structures deeply, for example, seq will evaluate only to the first constructor in the list:
> > [1,2,undefined] `seq` 3
> 3
While deepseq will force evaluation of all the list elements:
> > [1,2,undefined] `deepseq` 3
> *** Exception: Prelude.undefined
Another common use is to ensure any exceptions hidden within lazy fields of a data structure do not leak outside the scope of the exception handler, or to force evaluation of a data structure in one thread, before passing to another thread (preventing work moving to the wrong threads).
Show more results