module Data.Units.AngleSI.System
( module Data.Units.SI.System
, Angle (..)
, Radian (..)
, normalizeRadians
)
where
import Data.Fixed
import Data.Coerce
import Data.Units.Base
import Data.Units.SI.System
$(mkDim "Angle" "A" 1000)
$(mkBaseUnit "Radian" "rad" ''Angle)
normalizeRadians :: (RealFrac a, Floating a) => Radian a -> Radian a
normalizeRadians :: forall a. (RealFrac a, Floating a) => Radian a -> Radian a
normalizeRadians Radian a
x = if Radian a
xmod Radian a -> Radian a -> Bool
forall a. Ord a => a -> a -> Bool
> Radian a
forall a. Floating a => a
pi then Radian a
xmod Radian a -> Radian a -> Radian a
forall a. Num a => a -> a -> a
- Radian a
twoPi else Radian a
xmod
where
twoPi :: Radian a
twoPi = Radian a
2 Radian a -> Radian a -> Radian a
forall a. Num a => a -> a -> a
* Radian a
forall a. Floating a => a
pi
xmod :: Radian a
xmod = Radian a
x Radian a -> Radian a -> Radian a
forall a. Real a => a -> a -> a
`mod'` Radian a
twoPi