anchor.diff:  
   -module(emprng).
   
  --export([seed/0, seed/1, seed/2, seed/3, seed0/0, seed0/1,
  +-export([seed/0, seed/1, seed/2, seed/3, seed/4,
  +         seed0/0, seed0/1,
            uniform/0, uniform/1, uniform_s/1, uniform_s/2]).
   
   -define(DEFAULT_ALG_HANDLER, emprng_as183).
  
positive.code: seed({Alg, AS}) ->
      seed(Alg, AS).
  
  %% seed/3: seeds RNG with integer values in the process dictionary,
  %% and returns the old state.
  %% (compatible with the random module)
  
  -spec seed(A1 :: integer(), A2 :: integer(), A3 :: integer()) ->
        undefined | emprng_state().
  
  seed(A1, A2, A3) ->
      seed_put({?DEFAULT_ALG_HANDLER,
              ?DEFAULT_ALG_HANDLER:seed(A1, A2, A3)}).
  
  %% seed/2: seeds RNG with the algorithm handler and given values
  %% in the process dictionary, and returns the old state.
  %% Note: the type of the values depends on the algorithm handler.
  %% (new function)
  
negative.code: seed(Alg, AS) ->
      % No type checking on AS
      seed_put({Alg, AS}).
  
  %% seed/4: seeds RNG with the algorithm handler and
  %% given three integers in the process dictionary,
  %% and returns the old state.
  %% (new function)
  
  -spec seed(Alg :: emprng_alg_handler(),
             A1 :: integer(), A2 :: integer(), A3 :: integer()) ->
             undefined | emprng_state().
  
  seed(Alg, A1, A2, A3) ->
      seed_put({Alg, Alg:seed(A1, A2, A3)}).
  
  %% seed/3: seeds RNG with integer values in the process dictionary,
  %% and returns the old state.
  %% (compatible with the random module)
  
  -spec seed(A1 :: integer(), A2 :: integer(), A3 :: integer()) ->
        undefined | emprng_state().
  
  seed(A1, A2, A3) ->
      seed(?DEFAULT_ALG_HANDLER, A1, A2, A3).
  
  %%% uniform/0, uniform/1, uniform_s/1, uniform_s/2 are all
  %%% uniformly distributed random numbers.
  