{-# LANGUAGE TypeSynonymInstances #-}

module Clash.Unique
  ( Unique
  , Uniquable (..)
  ) where

type Unique = Int

class Uniquable a where
  getUnique :: a -> Unique
  setUnique :: a -> Unique -> a

instance Uniquable Unique where
  getUnique :: Unique -> Unique
getUnique = Unique -> Unique
forall a. a -> a
id
  setUnique :: Unique -> Unique -> Unique
setUnique = (Unique -> Unique -> Unique) -> Unique -> Unique -> Unique
forall a b c. (a -> b -> c) -> b -> a -> c
flip Unique -> Unique -> Unique
forall a b. a -> b -> a
const