    {-# 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