    {-# 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 (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool)
    -> (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool)
    -> Eq InterchangeNameAuthority
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    == :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    $c/= :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    /= :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    Eq, Eq InterchangeNameAuthority
    Eq InterchangeNameAuthority
    -> (InterchangeNameAuthority
        -> InterchangeNameAuthority -> Ordering)
    -> (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool)
    -> (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool)
    -> (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool)
    -> (InterchangeNameAuthority -> InterchangeNameAuthority -> Bool)
    -> (InterchangeNameAuthority
        -> InterchangeNameAuthority -> InterchangeNameAuthority)
    -> (InterchangeNameAuthority
        -> InterchangeNameAuthority -> InterchangeNameAuthority)
    -> Ord InterchangeNameAuthority
    InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    InterchangeNameAuthority -> InterchangeNameAuthority -> Ordering
    InterchangeNameAuthority
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    forall a.
    Eq a
    -> (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: InterchangeNameAuthority -> InterchangeNameAuthority -> Ordering
    compare :: InterchangeNameAuthority -> InterchangeNameAuthority -> Ordering
    $c< :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    < :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    $c<= :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    <= :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    $c> :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    > :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    $c>= :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    >= :: InterchangeNameAuthority -> InterchangeNameAuthority -> Bool
    $cmax :: InterchangeNameAuthority
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    max :: InterchangeNameAuthority
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    $cmin :: InterchangeNameAuthority
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    min :: InterchangeNameAuthority
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    Ord, Int -> InterchangeNameAuthority -> ShowS
    [InterchangeNameAuthority] -> ShowS
    InterchangeNameAuthority -> String
    (Int -> InterchangeNameAuthority -> ShowS)
    -> (InterchangeNameAuthority -> String)
    -> ([InterchangeNameAuthority] -> ShowS)
    -> Show InterchangeNameAuthority
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> InterchangeNameAuthority -> ShowS
    showsPrec :: Int -> InterchangeNameAuthority -> ShowS
    $cshow :: InterchangeNameAuthority -> String
    show :: InterchangeNameAuthority -> String
    $cshowList :: [InterchangeNameAuthority] -> ShowS
    showList :: [InterchangeNameAuthority] -> ShowS
    Show, Typeable InterchangeNameAuthority
    Typeable InterchangeNameAuthority
    -> (forall (c :: Type -> Type).
        (forall d b. Data d => c (d -> b) -> d -> c b)
        -> (forall g. g -> c g)
        -> InterchangeNameAuthority
        -> c InterchangeNameAuthority)
    -> (forall (c :: Type -> Type).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c InterchangeNameAuthority)
    -> (InterchangeNameAuthority -> Constr)
    -> (InterchangeNameAuthority -> DataType)
    -> (forall (t :: Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d. Data d => c (t d))
        -> Maybe (c InterchangeNameAuthority))
    -> (forall (t :: Type -> Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c InterchangeNameAuthority))
    -> ((forall b. Data b => b -> b)
        -> InterchangeNameAuthority -> InterchangeNameAuthority)
    -> (forall r r'.
        (r -> r' -> r)
        -> r
        -> (forall d. Data d => d -> r')
        -> InterchangeNameAuthority
        -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r
        -> (forall d. Data d => d -> r')
        -> InterchangeNameAuthority
        -> r)
    -> (forall u.
        (forall d. Data d => d -> u) -> InterchangeNameAuthority -> [u])
    -> (forall u.
        Int
        -> (forall d. Data d => d -> u) -> InterchangeNameAuthority -> u)
    -> (forall (m :: Type -> Type).
        Monad m =>
        (forall d. Data d => d -> m d)
        -> InterchangeNameAuthority -> m InterchangeNameAuthority)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> InterchangeNameAuthority -> m InterchangeNameAuthority)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> InterchangeNameAuthority -> m InterchangeNameAuthority)
    -> Data InterchangeNameAuthority
    InterchangeNameAuthority -> Constr
    InterchangeNameAuthority -> DataType
    (forall b. Data b => b -> b)
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    forall a.
    Typeable a
    -> (forall (c :: Type -> Type).
        (forall d b. Data d => c (d -> b) -> d -> c b)
        -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: Type -> Type).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: Type -> Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: Type -> Type).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u.
    Int
    -> (forall d. Data d => d -> u) -> InterchangeNameAuthority -> u
    forall u.
    (forall d. Data d => d -> u) -> InterchangeNameAuthority -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> InterchangeNameAuthority
    -> r
    forall r r'.
    (r' -> r -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> InterchangeNameAuthority
    -> r
    forall (m :: Type -> Type).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    forall (c :: Type -> Type).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c InterchangeNameAuthority
    forall (c :: Type -> Type).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g)
    -> InterchangeNameAuthority
    -> c InterchangeNameAuthority
    forall (t :: Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c InterchangeNameAuthority)
    forall (t :: Type -> Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c InterchangeNameAuthority)
    $cgfoldl :: forall (c :: Type -> Type).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g)
    -> InterchangeNameAuthority
    -> c InterchangeNameAuthority
    gfoldl :: forall (c :: Type -> Type).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g)
    -> InterchangeNameAuthority
    -> c InterchangeNameAuthority
    $cgunfold :: forall (c :: Type -> Type).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c InterchangeNameAuthority
    gunfold :: forall (c :: Type -> Type).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c InterchangeNameAuthority
    $ctoConstr :: InterchangeNameAuthority -> Constr
    toConstr :: InterchangeNameAuthority -> Constr
    $cdataTypeOf :: InterchangeNameAuthority -> DataType
    dataTypeOf :: InterchangeNameAuthority -> DataType
    $cdataCast1 :: forall (t :: Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c InterchangeNameAuthority)
    dataCast1 :: forall (t :: Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c InterchangeNameAuthority)
    $cdataCast2 :: forall (t :: Type -> Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c InterchangeNameAuthority)
    dataCast2 :: forall (t :: Type -> Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c InterchangeNameAuthority)
    $cgmapT :: (forall b. Data b => b -> b)
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    gmapT :: (forall b. Data b => b -> b)
    -> InterchangeNameAuthority -> InterchangeNameAuthority
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> InterchangeNameAuthority
    -> r
    gmapQl :: forall r r'.
    (r -> r' -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> InterchangeNameAuthority
    -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> InterchangeNameAuthority
    -> r
    gmapQr :: forall r r'.
    (r' -> r -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> InterchangeNameAuthority
    -> r
    $cgmapQ :: forall u.
    (forall d. Data d => d -> u) -> InterchangeNameAuthority -> [u]
    gmapQ :: forall u.
    (forall d. Data d => d -> u) -> InterchangeNameAuthority -> [u]
    $cgmapQi :: forall u.
    Int
    -> (forall d. Data d => d -> u) -> InterchangeNameAuthority -> u
    gmapQi :: forall u.
    Int
    -> (forall d. Data d => d -> u) -> InterchangeNameAuthority -> u
    $cgmapM :: forall (m :: Type -> Type).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    gmapM :: forall (m :: Type -> Type).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    $cgmapMp :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    gmapMp :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    $cgmapMo :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    gmapMo :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeNameAuthority -> m InterchangeNameAuthority
    Data, Typeable, (forall x.
     InterchangeNameAuthority -> Rep InterchangeNameAuthority x)
    -> (forall x.
        Rep InterchangeNameAuthority x -> InterchangeNameAuthority)
    -> Generic InterchangeNameAuthority
    forall x.
    Rep InterchangeNameAuthority x -> InterchangeNameAuthority
    forall x.
    InterchangeNameAuthority -> Rep InterchangeNameAuthority x
    forall a.
    (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
    $cfrom :: forall x.
    InterchangeNameAuthority -> Rep InterchangeNameAuthority x
    from :: forall x.
    InterchangeNameAuthority -> Rep InterchangeNameAuthority x
    $cto :: forall x.
    Rep InterchangeNameAuthority x -> InterchangeNameAuthority
    to :: forall x.
    Rep InterchangeNameAuthority x -> InterchangeNameAuthority
    Generic)

    instance NFData InterchangeNameAuthority where -- instance is derived from Generic instance

    data InterchangeName = InterchangeName { InterchangeName -> String
    name :: String, InterchangeName -> InterchangeNameAuthority
    authority :: InterchangeNameAuthority, InterchangeName -> Bool
    isAtomic :: Bool }
      deriving (InterchangeName -> InterchangeName -> Bool
    (InterchangeName -> InterchangeName -> Bool)
    -> (InterchangeName -> InterchangeName -> Bool)
    -> Eq InterchangeName
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: InterchangeName -> InterchangeName -> Bool
    == :: InterchangeName -> InterchangeName -> Bool
    $c/= :: InterchangeName -> InterchangeName -> Bool
    /= :: InterchangeName -> InterchangeName -> Bool
    Eq, Eq InterchangeName
    Eq InterchangeName
    -> (InterchangeName -> InterchangeName -> Ordering)
    -> (InterchangeName -> InterchangeName -> Bool)
    -> (InterchangeName -> InterchangeName -> Bool)
    -> (InterchangeName -> InterchangeName -> Bool)
    -> (InterchangeName -> InterchangeName -> Bool)
    -> (InterchangeName -> InterchangeName -> InterchangeName)
    -> (InterchangeName -> InterchangeName -> InterchangeName)
    -> Ord InterchangeName
    InterchangeName -> InterchangeName -> Bool
    InterchangeName -> InterchangeName -> Ordering
    InterchangeName -> InterchangeName -> InterchangeName
    forall a.
    Eq a
    -> (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: InterchangeName -> InterchangeName -> Ordering
    compare :: InterchangeName -> InterchangeName -> Ordering
    $c< :: InterchangeName -> InterchangeName -> Bool
    < :: InterchangeName -> InterchangeName -> Bool
    $c<= :: InterchangeName -> InterchangeName -> Bool
    <= :: InterchangeName -> InterchangeName -> Bool
    $c> :: InterchangeName -> InterchangeName -> Bool
    > :: InterchangeName -> InterchangeName -> Bool
    $c>= :: InterchangeName -> InterchangeName -> Bool
    >= :: InterchangeName -> InterchangeName -> Bool
    $cmax :: InterchangeName -> InterchangeName -> InterchangeName
    max :: InterchangeName -> InterchangeName -> InterchangeName
    $cmin :: InterchangeName -> InterchangeName -> InterchangeName
    min :: InterchangeName -> InterchangeName -> InterchangeName
    Ord, Typeable InterchangeName
    Typeable InterchangeName
    -> (forall (c :: Type -> Type).
        (forall d b. Data d => c (d -> b) -> d -> c b)
        -> (forall g. g -> c g) -> InterchangeName -> c InterchangeName)
    -> (forall (c :: Type -> Type).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c InterchangeName)
    -> (InterchangeName -> Constr)
    -> (InterchangeName -> DataType)
    -> (forall (t :: Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c InterchangeName))
    -> (forall (t :: Type -> Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c InterchangeName))
    -> ((forall b. Data b => b -> b)
        -> InterchangeName -> InterchangeName)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r)
    -> (forall u.
        (forall d. Data d => d -> u) -> InterchangeName -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> InterchangeName -> u)
    -> (forall (m :: Type -> Type).
        Monad m =>
        (forall d. Data d => d -> m d)
        -> InterchangeName -> m InterchangeName)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> InterchangeName -> m InterchangeName)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> InterchangeName -> m InterchangeName)
    -> Data InterchangeName
    InterchangeName -> Constr
    InterchangeName -> DataType
    (forall b. Data b => b -> b) -> InterchangeName -> InterchangeName
    forall a.
    Typeable a
    -> (forall (c :: Type -> Type).
        (forall d b. Data d => c (d -> b) -> d -> c b)
        -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: Type -> Type).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: Type -> Type -> Type) (c :: Type -> Type).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: Type -> Type).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: Type -> Type).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u.
    Int -> (forall d. Data d => d -> u) -> InterchangeName -> u
    forall u. (forall d. Data d => d -> u) -> InterchangeName -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r
    forall (m :: Type -> Type).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    forall (c :: Type -> Type).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c InterchangeName
    forall (c :: Type -> Type).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> InterchangeName -> c InterchangeName
    forall (t :: Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c InterchangeName)
    forall (t :: Type -> Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c InterchangeName)
    $cgfoldl :: forall (c :: Type -> Type).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> InterchangeName -> c InterchangeName
    gfoldl :: forall (c :: Type -> Type).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> InterchangeName -> c InterchangeName
    $cgunfold :: forall (c :: Type -> Type).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c InterchangeName
    gunfold :: forall (c :: Type -> Type).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c InterchangeName
    $ctoConstr :: InterchangeName -> Constr
    toConstr :: InterchangeName -> Constr
    $cdataTypeOf :: InterchangeName -> DataType
    dataTypeOf :: InterchangeName -> DataType
    $cdataCast1 :: forall (t :: Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c InterchangeName)
    dataCast1 :: forall (t :: Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c InterchangeName)
    $cdataCast2 :: forall (t :: Type -> Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c InterchangeName)
    dataCast2 :: forall (t :: Type -> Type -> Type) (c :: Type -> Type).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c InterchangeName)
    $cgmapT :: (forall b. Data b => b -> b) -> InterchangeName -> InterchangeName
    gmapT :: (forall b. Data b => b -> b) -> InterchangeName -> InterchangeName
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r
    gmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r
    gmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> InterchangeName -> r
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> InterchangeName -> [u]
    gmapQ :: forall u. (forall d. Data d => d -> u) -> InterchangeName -> [u]
    $cgmapQi :: forall u.
    Int -> (forall d. Data d => d -> u) -> InterchangeName -> u
    gmapQi :: forall u.
    Int -> (forall d. Data d => d -> u) -> InterchangeName -> u
    $cgmapM :: forall (m :: Type -> Type).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    gmapM :: forall (m :: Type -> Type).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    $cgmapMp :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    gmapMp :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    $cgmapMo :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    gmapMo :: forall (m :: Type -> Type).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> InterchangeName -> m InterchangeName
    Data, Typeable, (forall x. InterchangeName -> Rep InterchangeName x)
    -> (forall x. Rep InterchangeName x -> InterchangeName)
    -> Generic InterchangeName
    forall x. Rep InterchangeName x -> InterchangeName
    forall x. InterchangeName -> Rep InterchangeName x
    forall a.
    (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
    $cfrom :: forall x. InterchangeName -> Rep InterchangeName x
    from :: forall x. InterchangeName -> Rep InterchangeName x
    $cto :: forall x. Rep InterchangeName x -> InterchangeName
    to :: forall x. Rep InterchangeName x -> InterchangeName
    Generic)

    instance NFData InterchangeName where -- instance is derived from Generic instance

    instance Show InterchangeName where
      show :: InterchangeName -> String
    show InterchangeName
    n = InterchangeName -> String
    name InterchangeName
    n String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ String
    " (Issued by " String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ InterchangeNameAuthority -> String
    forall a. Show a => a -> String
    show (InterchangeName -> InterchangeNameAuthority
    authority InterchangeName
    n) String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ String
    ")"

    -- | 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 :: InterchangeName -> InterchangeName
    interchangeName = InterchangeName -> InterchangeName
    forall a. a -> a
    id