{-# OPTIONS_GHC -Wall #-}
-----------------------------------------------------------------------------
-- |
-- module      :  Data.FiniteField.Base
-- Copyright   :  (c) Masahiro Sakai 2013
-- License     :  BSD-style
--
-- Maintainer  :  masahiro.sakai@gmail.com
-- Stability   :  provisional
-- Portability :  portable
--
-----------------------------------------------------------------------------
module Data.FiniteField.Base
  ( FiniteField (..)
  ) where

-- | Type class for finite fields
class Fractional k => FiniteField k where
  -- | The order is number of elements of a finite field @k@.
  -- It of the form @p^n@, where @p@ is  prime number called the characteristic
  -- of the field, and @n@ is a positive integer.
  order   :: k -> Integer

  -- | The characteristic of a field, @p@.
  char    :: k -> Integer

  -- | The inverse of Frobenius endomorphism @x@ ↦ @x^p@.
  pthRoot :: k -> k

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