-- | Units related to the field of (classical) physics. Includes kinematics, forces, etc.
module Data.Drasil.Units.Physics where

import Data.Drasil.SI_Units (metre, radian, s_2, second, newton, kilogram,
  m_2, m_3, newton)
import Language.Drasil (cn, cn', UnitDefn, (/:), (/$), (*:), compoundUnit)

accelU, angVelU, angAccelU, forcePerMeterU, momtInertU, momentOfForceU,
 impulseU, springConstU, torqueU, velU :: UnitDefn

accelU :: UnitDefn
accelU          = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"acceleration"         (String -> NP
forall a. String -> NPG a
cn' String
"acceleration")         String
"acceleration"         (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
metre UnitDefn -> UnitDefn -> UnitEquation
/: UnitDefn
s_2
angVelU :: UnitDefn
angVelU         = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"angular velocity"     (String -> NP
forall a. String -> NPG a
cn' String
"angular velocity")     String
"angular velocity"     (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
radian UnitDefn -> UnitDefn -> UnitEquation
/: UnitDefn
second
angAccelU :: UnitDefn
angAccelU       = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"angular acceleration" (String -> NP
forall a. String -> NPG a
cn' String
"angular acceleration") String
"angular acceleration" (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
radian UnitDefn -> UnitDefn -> UnitEquation
/: UnitDefn
s_2
forcePerMeterU :: UnitDefn
forcePerMeterU  = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"force per meter"      (String -> NP
forall a. String -> NPG a
cn' String
"force per meter")      String
"force per meter"      (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
newton UnitDefn -> UnitDefn -> UnitEquation
/: UnitDefn
metre
impulseU :: UnitDefn
impulseU        = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"impulse"              (String -> NP
forall a. String -> NPG a
cn' String
"impulse")              String
"impulse"              (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
newton UnitDefn -> UnitDefn -> UnitEquation
*: UnitDefn
second
momtInertU :: UnitDefn
momtInertU      = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"moment of inertia"    (String -> NP
forall a. String -> NPG a
cn' String
"moment of inertia")    String
"moment of inertia"    (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
kilogram UnitDefn -> UnitDefn -> UnitEquation
*: UnitDefn
m_2
momentOfForceU :: UnitDefn
momentOfForceU  = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"moment of force"      (String -> NP
forall a. String -> NPG a
cn' String
"moment of force")      String
"moment of force"      (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
newton UnitDefn -> UnitDefn -> UnitEquation
*: UnitDefn
metre
springConstU :: UnitDefn
springConstU    = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"spring constant"      (String -> NP
forall a. String -> NPG a
cn' String
"spring constant")      String
"spring constant"      (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
newton UnitDefn -> UnitDefn -> UnitEquation
/: UnitDefn
metre
torqueU :: UnitDefn
torqueU         = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"torque"               (String -> NP
forall a. String -> NPG a
cn' String
"torque")               String
"torque"               (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
newton UnitDefn -> UnitDefn -> UnitEquation
*: UnitDefn
metre
velU :: UnitDefn
velU            = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"velocity"              (String -> NP
forall a. String -> NPG a
cn' String
"velocity")             String
"velocity"              (UnitEquation -> UnitDefn) -> UnitEquation -> UnitDefn
forall a b. (a -> b) -> a -> b
$ UnitDefn
metre UnitDefn -> UnitDefn -> UnitEquation
/: UnitDefn
second

gravConstU :: UnitDefn

gravConstU :: UnitDefn
gravConstU = String -> NP -> String -> UnitEquation -> UnitDefn
compoundUnit String
"gravConstU" (String -> NP
forall a. String -> NPG a
cn String
"gravitational constant")
  String
"universal gravitational constant" (UnitDefn
m_3 UnitDefn -> UnitEquation -> UnitEquation
/$ (UnitDefn
kilogram UnitDefn -> UnitDefn -> UnitEquation
*: UnitDefn
s_2))