{-# LANGUAGE DerivingVia #-}

module Data.EnumOrd (EnumOrd (..)) where

import Data.Function (on)
import Data.Ord (comparing)

newtype EnumOrd a = EnumOrd {unEnumOrd :: a}
  deriving (Show, Read) via a

instance Enum a => Eq (EnumOrd a) where
  (==) = (==) `on` (fromEnum . unEnumOrd)

instance Enum a => Ord (EnumOrd a) where
  compare = comparing $ fromEnum . unEnumOrd