roc-id-0.2.0.0: library/ROC/ID/Serial.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
module ROC.ID.Serial
( Serial (..)
, randomSerial
) where
import Control.Monad.Random.Class
( MonadRandom (..) )
import Data.Vector.Sized
( Vector )
import GHC.Generics
( Generic )
import ROC.ID.Digit
import ROC.ID.Utilities
import qualified Data.Vector.Sized as V
-- | A 7-digit serial number, as found within an ROC identification number.
--
-- A serial number is unique for a gender and location.
--
-- To generate a random 'Serial' number, use the 'randomSerial' function.
--
newtype Serial = Serial (Vector 7 Digit)
deriving (Eq, Generic, Ord, Show)
-- | Generate a random 'Serial' number.
--
randomSerial :: MonadRandom m => m Serial
randomSerial = Serial <$> V.replicateM randomBoundedEnum