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

        Maintainer : bjorn@buckwalter.se
        Stability  : Experimental
        Portability: GHC only?

    Re-exports the raw 'Quantity' constructor from the Numeric.Units.Dimensional.Internal module, along with 'Data.Coerce.coerce',
    for convenience in converting between raw representations and dimensional values.

    Note that use of these constructs requires the user to verify the dimensional safety of the conversion,
    because the coercion doesn't explicitly mention the unit of the representation. Note also that the
    'Quantity' constructor constructs a 'Numeric.Units.Dimensional.SQuantity' which may have a scale factor
    other than 'Data.ExactPi.TypeLevel.One'.

    Note that the haddock documentation doesn't mention the 'Quantity' constructor because it is a part of the
    'Dimensional' associated data family, but it is exported by this module.

    -}

    module Numeric.Units.Dimensional.Coercion
    (
      coerce, Dimensional(Quantity), unQuantity
    )
    where

    import Data.Coerce (coerce)
    import Numeric.Units.Dimensional.Internal (SQuantity, Dimensional(Quantity))

    -- | Unwraps a possibly-scaled `SQuantity`, yielding its underlying representation.
    --
    -- This is a type-restricted version of `coerce`.
    unQuantity :: SQuantity s d a -> a
    unQuantity :: forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
    unQuantity = SQuantity s d a -> a
    forall a b. Coercible a b => a -> b
    coerce