-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Efficient, purely functional generation of prime numbers
--   
--   This Haskell library provides an efficient lazy wheel sieve for prime
--   generation inspired by <i>Lazy wheel sieves and spirals of</i>
--   <i>primes</i> by Colin Runciman and <i>The Genuine Sieve of
--   Eratosthenes</i> by Melissa O'Neil.
@package primes
@version 0.2.1.0


-- | This Haskell library provides an efficient lazy wheel sieve for prime
--   generation inspired by <i>Lazy wheel sieves and spirals of</i>
--   <i>primes</i> by Colin Runciman
--   (<a>http://www.cs.york.ac.uk/ftpdir/pub/colin/jfp97lw.ps.gz</a>) and
--   <i>The Genuine Sieve of Eratosthenes</i> by Melissa O'Neil
--   (<a>http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf</a>).
module Data.Numbers.Primes

-- | This global constant is an infinite list of prime numbers. It is
--   generated by a lazy wheel sieve and shared across the whole program
--   run. If you are concerned about the memory requirements of sharing
--   many primes you can call the function <tt>wheelSieve</tt> directly.
primes :: Integral int => [int]

-- | This function returns an infinite list of prime numbers by sieving
--   with a wheel that cancels the multiples of the first <tt>n</tt> primes
--   where <tt>n</tt> is the argument given to <tt>wheelSieve</tt>. Don't
--   use too large wheels. The number <tt>6</tt> is a good value to pass to
--   this function. Larger wheels improve the run time at the cost of
--   higher memory requirements.
wheelSieve :: Integral int => Int -> [int]

-- | Checks whether a given number is prime.
--   
--   This function uses trial division to check for divisibility with all
--   primes below the square root of the given number. It is impractical
--   for numbers with a very large smallest prime factor.
isPrime :: Integral int => int -> Bool

-- | Yields the sorted list of prime factors of the given positive number.
--   
--   This function uses trial division and is impractical for numbers with
--   very large prime factors.
primeFactors :: Integral int => int -> [int]
