patat-0.14.0.0: lib/Patat/Unique.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Patat.Unique
( Unique
, UniqueGen
, zeroUniqueGen
, freshUnique
) where
import Data.Hashable (Hashable)
-- | Can be used as a unique identifier.
newtype Unique = Unique Int deriving (Hashable, Eq, Ord, Show)
-- | Used to generate fresh variables.
newtype UniqueGen = UniqueGen Int deriving (Show)
zeroUniqueGen :: UniqueGen
zeroUniqueGen = UniqueGen 0
freshUnique :: UniqueGen -> (Unique, UniqueGen)
freshUnique (UniqueGen x) = (Unique x, UniqueGen (x + 1))