{-# 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)