content: {-# OPTIONS_GHC -Wall #-}
  {-# LANGUAGE Safe #-}
  
  {- | 
  Module      :  Physics.Learn.CoordinateFields
  Copyright   :  (c) Scott N. Walck 2012-2018
  License     :  BSD3 (see LICENSE)
  Maintainer  :  Scott N. Walck <walck@lvc.edu>
  Stability   :  experimental
  
  Coordinate fields for Cartesian, cylindrical, and spherical coordinates.
  -}
  
  module Physics.Learn.CoordinateFields
      ( x
      , y
      , z
      , s
      , phi
      , r
      , theta
      )
      where
  
  import Physics.Learn.Position
      ( ScalarField
      , cartesianCoordinates
      , cylindricalCoordinates
      , sphericalCoordinates
      )
  
  fst3 :: (a,b,c) -> a
  fst3 (v,_,_) = v
  
  snd3 :: (a,b,c) -> b
  snd3 (_,v,_) = v
  
  thd3 :: (a,b,c) -> c
  thd3 (_,_,v) = v
  
  -- | The x Cartesian coordinate of a position.
  x :: ScalarField
  x = fst3 . cartesianCoordinates
  
  -- | The y Cartesian coordinate of a position.
  y :: ScalarField
  y = snd3 . cartesianCoordinates
  
  -- | The z Cartesian (or cylindrical) coordinate of a position.
  z :: ScalarField
  z = thd3 . cartesianCoordinates
  
  -- | The s cylindrical coordinate of a position.
  --   This is the distance of the position from the z axis.
  s :: ScalarField
  s = fst3 . cylindricalCoordinates
  
  -- | The phi cylindrical (or spherical) coordinate of a position.
  --   This is the angle from the positive x axis 
  --   to the projection of the position onto the xy plane.
  phi :: ScalarField
  phi = snd3 . cylindricalCoordinates
  
  -- | The r spherical coordinate of a position.
  --   This is the distance of the position from the origin.
  r :: ScalarField
  r = fst3 . sphericalCoordinates
  
  -- | The theta spherical coordinate of a position.
  --   This is the angle from the positive z axis to the position.
  theta :: ScalarField
  theta = snd3 . sphericalCoordinates
  
  