Create a generator for variates using the given seed, of which up to
256 elements will be used. For arrays of less than 256 elements, part
of the default seed will be used to finish initializing the
generator's state.
Examples:
initialize (singleton 42)
initialize (fromList [4, 8, 15, 16, 23, 42])
If a seed contains fewer than 256 elements, it is first used verbatim,
then its elements are
xored against elements of the default
seed until 256 elements are reached.
If a seed contains exactly 258 elements, then the last two elements
are used to set the generator's initial state. This allows for
complete generator reproducibility, so that e.g.
gen' == gen
in the following example:
gen' <- initialize . fromSeed =<< save
In the MWC algorithm, the
carry value must be strictly smaller
than the multiplicator (see
https://en.wikipedia.org/wiki/Multiply-with-carry). Hence, if a
seed contains exactly 258 elements, the
carry value, which is
the last of the 258 values, is moduloed by the multiplicator.
Note that if the
first carry value is strictly smaller than the
multiplicator, all subsequent carry values are also strictly smaller
than the multiplicator (a proof of this is in the comments of the code
of
uniformWord32), hence when restoring a saved state, we have
the guarantee that moduloing the saved carry won't modify its value.