anchor.diff:  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
  +%% seed/2: seeds RNG with the algorithm handler and
  +%% given internal state value (depending on the algorihm handler)
   %% in the process dictionary, and returns the old state.
   %% Note: the type of the values depends on the algorithm handler.
   %% (new function)
  
positive.code: 
  -module(emprng).
  
  -export([seed/0, seed/1, seed/2, seed/3, seed0/0, seed0/1,
           uniform/0, uniform/1, uniform_s/1, uniform_s/2]).
  
  -define(DEFAULT_ALG_HANDLER, emprng_as183).
  
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.
  