modular-arithmetic-1.2.0.0: A type for integers modulo some constant.

Safe Haskell None Haskell98

Data.Modular

Description

This module provides types for working with integers modulo some constant.

This module uses some new Haskell features introduced in 7.6. In particular, it needs `DataKinds` and type literals (GHC.TypeLits). The `TypeOperators` extension is needed for the nice infix syntax.

These types are created with the type constructor `Mod` (or its synonym `/`). To work with integers mod 7, you could write:

```Int `Mod` 7
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}`.)

All the usual typeclasses are defined for these types. You can also get the constant using `bound` or extract the underlying value using `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```

Synopsis

# Documentation

unMod :: (i `Mod` n) -> i Source

Extract the underlying integral value from a modular type.

toMod :: forall n i. (Integral i, KnownNat n) => i -> i `Mod` n Source

Wraps the underlying type into the modular type, wrapping as appropriate.

toMod' :: forall n i j. (Integral i, Integral j, KnownNat n) => i -> j `Mod` n Source

Wraps an integral number to a mod, converting between integral types.

data Mod i n Source

The actual type, wrapping an underlying `Integeral` type `i` in a newtype annotated with the bound.

Instances

 (Integral i, KnownNat n) => Bounded (Mod i n) (Integral i, KnownNat n) => Enum (Mod i n) Eq i => Eq (Mod i n) (Integral i, KnownNat n) => Integral (Mod i n) (Integral i, KnownNat n) => Num (Mod i n) Ord i => Ord (Mod i n) (Read i, Integral i, KnownNat n) => Read (Mod i n) (Integral i, KnownNat n) => Real (Mod i n) Show i => Show (Mod i n)

type (/) = Mod Source

A synonym for `Mod`, inspired by the ℤ/n syntax from mathematics.

type = Integer Source

A synonym for Integer, also inspired by the ℤ/n syntax.