radian-0.0.3: src/Data/Radian.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Data.Radian(
Radian
, radians
, degrees
) where
import Control.Lens(Iso, iso)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Prelude(Show, Num((*)), Fractional((/)), Floating, Real, RealFrac, RealFloat, pi)
-- $setup
-- >>> import Control.Lens((#))
-- >>> import Prelude(Double)
newtype Radian a =
Radian a
deriving (Eq, Ord, Show, Num, Fractional, Floating, Real, RealFrac, RealFloat)
-- | An isomorphism from radians to degrees.
--
-- >>> radians # (180 :: Double)
-- Radian 3.141592653589793
--
-- >> radians # (90 :: Double)
-- Radian 1.5707963267948966
--
-- >>> radians # (359 :: Double)
-- Radian 6.265732014659643
--
-- >>> radians # (360 :: Double)
-- Radian 6.283185307179586
--
-- >>> radians # (3600 :: Double)
-- Radian 62.83185307179586
--
-- >>> radians # (1 :: Double)
-- Radian 1.7453292519943295e-2
--
-- >>> radians # ((-180) :: Double)
-- Radian (-3.141592653589793)
radians ::
(Floating a, Floating b) =>
Iso (Radian a) (Radian b) a b
radians =
iso
(\(Radian a) -> a / pi * 180)
(\a -> Radian (a / 180 * pi))
degrees ::
(Floating a, Floating b) =>
Iso (Radian a) (Radian b) a b
degrees =
iso
(\(Radian a) -> a)
Radian