{-# LANGUAGE TemplateHaskell #-}
module Data.Units.NonStd.Temperature
  ( Data.Units.SI.Derived.Celsius (..)
  , Fahrenheit(..)
  ) where

import Data.Units.Base
import Data.Units.SI
import Data.Units.SI.Derived


-- | Thermodynamic temperature in Fahrenheit degrees

--

$(mkUnitNoFactor "Fahrenheit" "°F" ''Temperature)

instance Fractional a => ConversionFactor Fahrenheit a where
  factor :: a
factor = a
5 a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
9
  {-# INLINE factor #-}

instance Fractional a => ConvertibleUnit Fahrenheit a where
  toBaseUnit :: Fahrenheit a -> BaseUnitOf Fahrenheit a
toBaseUnit (Fahrenheit a
x) = a -> Kelvin a
forall a. a -> Kelvin a
Kelvin ((a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a
459.67) a -> a -> a
forall a. Num a => a -> a -> a
* a
5 a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
9)
  {-# INLINE toBaseUnit #-}

  fromBaseUnit :: BaseUnitOf Fahrenheit a -> Fahrenheit a
fromBaseUnit (Kelvin a
x) = a -> Fahrenheit a
forall a. a -> Fahrenheit a
Fahrenheit (a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
9 a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
5 a -> a -> a
forall a. Num a => a -> a -> a
- a
459.67)
  {-# INLINE fromBaseUnit #-}