module Numeric.Algebra.Field
( Field,
)
where
import Data.Complex (Complex)
import Data.Fixed (Fixed, HasResolution)
import Data.Int (Int16, Int32, Int64, Int8)
import Data.Kind (Constraint, Type)
import Data.Ratio (Ratio)
import Data.Word (Word16, Word32, Word64, Word8)
import Numeric.Algebra.Ring (Ring)
import Numeric.Algebra.Semifield (Semifield)
type Field :: Type -> Constraint
class (Ring f, Semifield f) => Field f
instance Field Float
instance Field Double
instance Field Int
instance Field Int8
instance Field Int16
instance Field Int32
instance Field Int64
instance Field Integer
instance Field Word
instance Field Word8
instance Field Word16
instance Field Word32
instance Field Word64
instance Field (Ratio Integer)
instance (RealFloat a) => Field (Complex a)
instance (HasResolution k) => Field (Fixed k)