{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Numeric.Units.Dimensional.UnitNames.InterchangeNames ( InterchangeNameAuthority(..), InterchangeName(..), HasInterchangeName(..) ) where import Control.DeepSeq import Data.Data import GHC.Generics import Prelude -- | Represents the authority which issued an interchange name for a unit. data InterchangeNameAuthority = UCUM -- ^ The interchange name originated with the Unified Code for Units of Measure. | DimensionalLibrary -- ^ The interchange name originated with the dimensional library. | Custom -- ^ The interchange name originated with a user of the dimensional library. deriving (Eq, Ord, Show, Data, Typeable, Generic) instance NFData InterchangeNameAuthority where -- instance is derived from Generic instance data InterchangeName = InterchangeName { name :: String, authority :: InterchangeNameAuthority, isAtomic :: Bool } deriving (Eq, Ord, Data, Typeable, Generic) instance NFData InterchangeName where -- instance is derived from Generic instance instance Show InterchangeName where show n = name n ++ " (Issued by " ++ show (authority n) ++ ")" -- | Determines the authority which issued the interchange name of a unit or unit name. -- For composite units, this is the least-authoritative interchange name of any constituent name. -- -- Note that the least-authoritative authority is the one sorted as greatest by the 'Ord' instance of 'InterchangeNameAuthority'. class HasInterchangeName a where interchangeName :: a -> InterchangeName instance HasInterchangeName InterchangeName where interchangeName = id