convert-units-0: src/Data/Units/AngleSI/Derived.hs
--------------------------------------------------------------------------------
-- |
--
-- Module : Data.Units.AngleSI.Derived
-- Description : Dimensionless angles
-- Copyright : (c) Alice Rixte 2025
-- License : BSD 3
-- Maintainer : alice.rixte@u-bordeaux.fr
-- Stability : unstable
-- Portability : non-portable (GHC extensions)
--
-- This module defines SI derived units that use angles, where angles have a
-- dimension @`A`@.
--
-- See "Data.Units.SI.Derived.Angle" for an equivalent of this where angles are
-- dimensionless.
--
--------------------------------------------------------------------------------
module Data.Units.AngleSI.Derived
( module Data.Units.SI.Derived.NonAngle
, SolidAngle
, Steradian (..)
, LuminousFlux
, Lumen (..)
, Illuminance
, Lux (..)
)
where
import Data.Coerce
import Data.Units.Base
import Data.Units.AngleSI.System
import Data.Units.SI.Derived.NonAngle
-- | Solid angle quantity.
type SolidAngle = Angle .^+ 2
-- | A solid angle in steradians.
--
$(mkUnit "Steradian" "sr" ''SolidAngle 1)
-- | Luminous flux quantity. Equal to
--
-- @ 'Angle'.^+2 .*. 'LuminousIntensity'@
--
type LuminousFlux = NormalizeDim (LuminousIntensity .*. SolidAngle)
-- | Luminous flux in lumens
--
$(mkUnit "Lumen" "lm" ''LuminousFlux 1)
-- | Illuminance quantity. Equal to
--
-- @ 'Angle'.^+2 .*. 'Length'.^-2 .*. 'LuminousIntensity' @
--
type Illuminance = NormalizeDim (LuminousFlux ./. Area)
-- | Illuminance in lux
--
$(mkUnit "Lux" "lx" ''Illuminance 1)