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


-- | Finite Fields
--   
--   This is an implementation of finite fields. Currently only prime
--   fields are supported.
@package finite-field
@version 0.8.0


module Data.FiniteField.Base

-- | Type class for finite fields
class Fractional k => FiniteField k

-- | The order is number of elements of a finite field <tt>k</tt>. It of
--   the form <tt>p^n</tt>, where <tt>p</tt> is prime number called the
--   characteristic of the field, and <tt>n</tt> is a positive integer.
order :: FiniteField k => k -> Integer

-- | The characteristic of a field, <tt>p</tt>.
char :: FiniteField k => k -> Integer

-- | The inverse of Frobenius endomorphism <tt>x</tt> ↦ <tt>x^p</tt>.
pthRoot :: FiniteField k => k -> k

-- | All values of a field
allValues :: FiniteField k => [k]


-- | Finite field of prime order p, Fp = Z/pZ.
--   
--   References:
--   
--   <ul>
--   <li><a>http://en.wikipedia.org/wiki/Finite_field</a></li>
--   </ul>
module Data.FiniteField.PrimeField

-- | Finite field of prime order p, Fp = Z/pZ.
--   
--   NB: Primality of <tt>p</tt> is assumed, but not checked.
data PrimeField p

-- | conversion to <a>Integer</a>
toInteger :: PrimeField p -> Integer

-- | Create a PrimeField type
primeField :: Integer -> TypeQ
instance GHC.Classes.Eq (Data.FiniteField.PrimeField.PrimeField p)
instance GHC.Show.Show (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => GHC.Read.Read (Data.FiniteField.PrimeField.PrimeField p)
instance Control.DeepSeq.NFData (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => GHC.Num.Num (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => GHC.Real.Fractional (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => GHC.Enum.Bounded (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => GHC.Enum.Enum (Data.FiniteField.PrimeField.PrimeField p)
instance GHC.Classes.Ord (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => Data.FiniteField.Base.FiniteField (Data.FiniteField.PrimeField.PrimeField p)
instance TypeLevel.Number.Nat.Nat p => Data.Hashable.Class.Hashable (Data.FiniteField.PrimeField.PrimeField p)


module Data.FiniteField
