    {-# LANGUAGE PatternSynonyms #-}

    {- |
       Copyright  : Copyright (C) 2006-2018 Bjorn Buckwalter
       License    : BSD3

       Maintainer : bjorn@buckwalter.se
       Stability  : Stable
       Portability: GHC only

    This module provides types and functions for manipulating unit names.

    Please note that the details of the name representation may be less stable than the other APIs
    provided by this package, as new features using them are still being developed.

    -}
    module Numeric.Units.Dimensional.UnitNames
    (
      -- * Data Types
      UnitName, NameAtom, Prefix, PrefixName, Metricality(..),
      -- * Construction of Unit Names
      atom, applyPrefix, (*), (/), (^), product, reduce, grouped,
      -- * Standard Names
      baseUnitName, siPrefixes, nOne,
      -- * Inspecting Prefixes
      prefixName, scaleFactor,
      -- * Convenience Type Synonyms for Unit Name Transformations
      UnitNameTransformer, UnitNameTransformer2,
      -- * Forgetting Unwanted Phantom Types
      weaken, strengthen, relax,
      name_en, abbreviation_en, asAtomic
    )
    where

    import Numeric.Units.Dimensional.UnitNames.Internal
    import Numeric.Units.Dimensional.Variants
    import Prelude hiding ((*), (/), (^), product)