-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A type for integers modulo some constant. -- @package modular-arithmetic @version 1.2.1.0 -- | Types for working with integers modulo some constant. -- -- Mod and its synonym / let you wrap arbitrary -- numeric types in a modulus. To work with integers (mod 7) backed by -- Integer, you could write: -- --
--   Integer `Mod` 7
--   Integer/7
--   ℤ/7
--   
-- -- (The last is a synonym for Integer provided by this library. -- In Emacs, you can use the TeX input mode to type it with -- \Bbb{Z}.) -- -- The usual numeric typeclasses are defined for these types. You can -- always extrac the underlying value with unMod. -- -- Here is a quick example: -- --
--   *Data.Modular> (10 :: ℤ/7) * (11 :: ℤ/7)
--   5
--   
-- -- It also works correctly with negative numeric literals: -- --
--   *Data.Modular> (-10 :: ℤ/7) * (11 :: ℤ/7)
--   2
--   
-- -- To us type level numeric literals you need to enable the -- DataKinds extension and to use infix syntax for Mod -- or the / synonym, you need TypeOperators. module Data.Modular -- | Extract the underlying integral value from a modular type. unMod :: i `Mod` n -> i -- | Wraps the underlying type into the modular type, wrapping as -- appropriate. toMod :: (Integral i, KnownNat n) => i -> i `Mod` n -- | Wraps an integral number to a mod, converting between integral types. toMod' :: (Integral i, Integral j, KnownNat n) => i -> j `Mod` n -- | The actual type, wrapping an underlying Integeral type -- i in a newtype annotated with the bound. data Mod i (n :: Nat) -- | The modular inverse. Note that only numbers coprime to n have -- an inverse modulo n. inv :: (KnownNat n, Integral i) => Mod i n -> Mod i n -- | A synonym for Mod, inspired by the ℤ/n syntax from -- mathematics. type (/) = Mod -- | A synonym for Integer, also inspired by the ℤ/n syntax. type ℤ = Integer -- | Convert an integral number i into a Mod value -- given modular bound n at type level. modVal :: (Integral i, KnownNat n) => i -> proxy n -> Mod i n -- | This type represents a modular number with unknown bound. data SomeMod i -- | Convert an integral number i into an unknown -- Mod value. someModVal :: Integral i => i -> Integer -> Maybe (SomeMod i) instance Eq i => Eq (Mod i n) instance Ord i => Ord (Mod i n) instance Show i => Show (SomeMod i) instance (Integral i, KnownNat n) => Integral (Mod i n) instance (Integral i, KnownNat n) => Real (Mod i n) instance (Integral i, KnownNat n) => Bounded (Mod i n) instance (Integral i, KnownNat n) => Enum (Mod i n) instance (Integral i, KnownNat n) => Num (Mod i n) instance (Read i, Integral i, KnownNat n) => Read (Mod i n) instance Show i => Show (Mod i n)