From 3440c845430aae9f7d1aa6be6e3505a5343b6f4b Mon Sep 17 00:00:00 2001 From: Tissevert Date: Tue, 12 Nov 2019 22:15:39 +0100 Subject: [PATCH] Expose internal Int in IDs and make the type an instance of Random (generating only positive IDs) --- src/Hanafuda/ID.hs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Hanafuda/ID.hs b/src/Hanafuda/ID.hs index d9bb031..5e7eeba 100644 --- a/src/Hanafuda/ID.hs +++ b/src/Hanafuda/ID.hs @@ -1,10 +1,17 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Hanafuda.ID ( - ID(..) - , getID + ID(..) ) where -newtype ID a = ID Int deriving (Eq, Ord, Enum, Read, Show) +import System.Random (Random(..)) -getID :: ID a -> String -getID (ID n) = show n +newtype ID a = ID { + getID :: Int + } deriving (Eq, Ord, Enum, Read, Show) + +rIntToRID :: (Int, g) -> (ID a, g) +rIntToRID (someID, g) = (ID someID, g) + +instance Random (ID a) where + random = rIntToRID . randomR (0, maxBound) + randomR (ID idA, ID idB) = rIntToRID . randomR (idA, idB)