{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module GroupPresentation.Generator (
    Generator,
    generator,
    numGenerator,
    GWord,
  ) where

newtype Generator = G { Generator -> Int
numGenerator :: Int }
    deriving (Generator -> Generator -> Bool
(Generator -> Generator -> Bool)
-> (Generator -> Generator -> Bool) -> Eq Generator
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Generator -> Generator -> Bool
$c/= :: Generator -> Generator -> Bool
== :: Generator -> Generator -> Bool
$c== :: Generator -> Generator -> Bool
Eq, Eq Generator
Eq Generator
-> (Generator -> Generator -> Ordering)
-> (Generator -> Generator -> Bool)
-> (Generator -> Generator -> Bool)
-> (Generator -> Generator -> Bool)
-> (Generator -> Generator -> Bool)
-> (Generator -> Generator -> Generator)
-> (Generator -> Generator -> Generator)
-> Ord Generator
Generator -> Generator -> Bool
Generator -> Generator -> Ordering
Generator -> Generator -> Generator
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Generator -> Generator -> Generator
$cmin :: Generator -> Generator -> Generator
max :: Generator -> Generator -> Generator
$cmax :: Generator -> Generator -> Generator
>= :: Generator -> Generator -> Bool
$c>= :: Generator -> Generator -> Bool
> :: Generator -> Generator -> Bool
$c> :: Generator -> Generator -> Bool
<= :: Generator -> Generator -> Bool
$c<= :: Generator -> Generator -> Bool
< :: Generator -> Generator -> Bool
$c< :: Generator -> Generator -> Bool
compare :: Generator -> Generator -> Ordering
$ccompare :: Generator -> Generator -> Ordering
$cp1Ord :: Eq Generator
Ord, Int -> Generator
Generator -> Int
Generator -> [Generator]
Generator -> Generator
Generator -> Generator -> [Generator]
Generator -> Generator -> Generator -> [Generator]
(Generator -> Generator)
-> (Generator -> Generator)
-> (Int -> Generator)
-> (Generator -> Int)
-> (Generator -> [Generator])
-> (Generator -> Generator -> [Generator])
-> (Generator -> Generator -> [Generator])
-> (Generator -> Generator -> Generator -> [Generator])
-> Enum Generator
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Generator -> Generator -> Generator -> [Generator]
$cenumFromThenTo :: Generator -> Generator -> Generator -> [Generator]
enumFromTo :: Generator -> Generator -> [Generator]
$cenumFromTo :: Generator -> Generator -> [Generator]
enumFromThen :: Generator -> Generator -> [Generator]
$cenumFromThen :: Generator -> Generator -> [Generator]
enumFrom :: Generator -> [Generator]
$cenumFrom :: Generator -> [Generator]
fromEnum :: Generator -> Int
$cfromEnum :: Generator -> Int
toEnum :: Int -> Generator
$ctoEnum :: Int -> Generator
pred :: Generator -> Generator
$cpred :: Generator -> Generator
succ :: Generator -> Generator
$csucc :: Generator -> Generator
Enum)

instance Bounded Generator where
    minBound :: Generator
minBound = Int -> Generator
G Int
0
    maxBound :: Generator
maxBound = Int -> Generator
G Int
forall a. Bounded a => a
maxBound

generator :: Int -> Generator
generator :: Int -> Generator
generator = Int -> Generator
G

type GWord = [Generator]