{-# LANGUAGE TypeSynonymInstances #-}
module Foundation.Math.Trigonometry
    ( Trigonometry(..)
    ) where

import           Basement.Compat.Base
import qualified Prelude

-- | Method to support basic trigonometric functions
class Trigonometry a where
    -- | the famous pi value
    pi    :: a
    -- | sine
    sin   :: a -> a
    -- | cosine
    cos   :: a -> a
    -- | tan
    tan   :: a -> a
    -- | sine-1
    asin  :: a -> a
    -- | cosine-1
    acos  :: a -> a
    -- | tangent-1
    atan  :: a -> a
    -- | hyperbolic sine
    sinh  :: a -> a
    -- | hyperbolic cosine
    cosh  :: a -> a
    -- | hyperbolic tangent
    tanh  :: a -> a
    -- | hyperbolic sine-1
    asinh :: a -> a
    -- | hyperbolic cosine-1
    acosh :: a -> a
    -- | hyperbolic tangent-1
    atanh :: a -> a

instance Trigonometry Float where
    pi :: Float
pi = Float
forall a. Floating a => a
Prelude.pi
    sin :: Float -> Float
sin = Float -> Float
forall a. Floating a => a -> a
Prelude.sin
    cos :: Float -> Float
cos = Float -> Float
forall a. Floating a => a -> a
Prelude.cos
    tan :: Float -> Float
tan = Float -> Float
forall a. Floating a => a -> a
Prelude.tan
    asin :: Float -> Float
asin = Float -> Float
forall a. Floating a => a -> a
Prelude.asin
    acos :: Float -> Float
acos = Float -> Float
forall a. Floating a => a -> a
Prelude.acos
    atan :: Float -> Float
atan = Float -> Float
forall a. Floating a => a -> a
Prelude.atan
    sinh :: Float -> Float
sinh = Float -> Float
forall a. Floating a => a -> a
Prelude.sinh
    cosh :: Float -> Float
cosh = Float -> Float
forall a. Floating a => a -> a
Prelude.cosh
    tanh :: Float -> Float
tanh = Float -> Float
forall a. Floating a => a -> a
Prelude.tanh
    asinh :: Float -> Float
asinh = Float -> Float
forall a. Floating a => a -> a
Prelude.asinh
    acosh :: Float -> Float
acosh = Float -> Float
forall a. Floating a => a -> a
Prelude.acosh
    atanh :: Float -> Float
atanh = Float -> Float
forall a. Floating a => a -> a
Prelude.atanh

instance Trigonometry Double where
    pi :: Double
pi = Double
forall a. Floating a => a
Prelude.pi
    sin :: Double -> Double
sin = Double -> Double
forall a. Floating a => a -> a
Prelude.sin
    cos :: Double -> Double
cos = Double -> Double
forall a. Floating a => a -> a
Prelude.cos
    tan :: Double -> Double
tan = Double -> Double
forall a. Floating a => a -> a
Prelude.tan
    asin :: Double -> Double
asin = Double -> Double
forall a. Floating a => a -> a
Prelude.asin
    acos :: Double -> Double
acos = Double -> Double
forall a. Floating a => a -> a
Prelude.acos
    atan :: Double -> Double
atan = Double -> Double
forall a. Floating a => a -> a
Prelude.atan
    sinh :: Double -> Double
sinh = Double -> Double
forall a. Floating a => a -> a
Prelude.sinh
    cosh :: Double -> Double
cosh = Double -> Double
forall a. Floating a => a -> a
Prelude.cosh
    tanh :: Double -> Double
tanh = Double -> Double
forall a. Floating a => a -> a
Prelude.tanh
    asinh :: Double -> Double
asinh = Double -> Double
forall a. Floating a => a -> a
Prelude.asinh
    acosh :: Double -> Double
acosh = Double -> Double
forall a. Floating a => a -> a
Prelude.acosh
    atanh :: Double -> Double
atanh = Double -> Double
forall a. Floating a => a -> a
Prelude.atanh