-- SG library
-- Copyright (c) 2009, Neil Brown.
-- All rights reserved.
-- 
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are
-- met:
--
--  * Redistributions of source code must retain the above copyright
--    notice, this list of conditions and the following disclaimer.
--  * Redistributions in binary form must reproduce the above copyright
--    notice, this list of conditions and the following disclaimer in the
--    documentation and/or other materials provided with the distribution.
--  * The author's name may not be used to endorse or promote products derived
--    from this software without specific prior written permission.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


-- | A small geometry library, with vectors, matrices and simple shape
-- collision detection that is intended to be straightforward in two and three
-- dimensions.
--
-- The basics of vectors are in the "Data.SG.Vector" module, the basics of lines
-- and geometry tests (e.g. testing whether a point is on a line) are in "Data.SG.Geometry",
-- with further specialised tests in "Data.SG.Geometry.TwoDim" and "Data.SG.Geometry.ThreeDim".
--  Matrix transformations are in "Data.SG.Matrix" and shapes (with collision detection)
-- are in "Data.SG.Shape".
--
-- The names for most of the types in this library end with a prime.  This is because
-- it is intended that you specialise these types (usually to Float or Double)
-- in your application as follows:
--
-- > type Point2 = Point2' Double
-- > type Rel2 = Rel2' Double
-- > type Line2 = Line2' Double
-- > type Matrix22 = Matrix22' Double
--
-- Much of the use of the types (especially vectors) in this library is made
-- using type-classes such as Num, Functor, Applicative and so on.  For more
-- explanation on some of the less well-known type-classes, see either the
-- article Typeclassopedia in The Monad Reader
-- (<http://www.haskell.org/haskellwiki/The_Monad.Reader>) issue 13
-- (<http://www.haskell.org/sitewiki/images/8/85/TMR-Issue13.pdf>), or my own notes
-- at <http://www.twistedsquare.com/haskell.html>.
--
-- To understand what various functions will actually do, look at the SGdemo project
-- (<http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SGdemo>)
-- on Hackage (and its code) which provides a visual demonstration of several of
-- the functions.
module Data.SG
  (module Data.SG.Vector
  ,module Data.SG.Vector.Basic
  ,module Data.SG.Geometry
  ,module Data.SG.Geometry.TwoDim
  ,module Data.SG.Geometry.ThreeDim
  ,module Data.SG.Matrix
  ,module Data.SG.Shape
  ) where

import Data.SG.Vector
import Data.SG.Vector.Basic
import Data.SG.Geometry
import Data.SG.Geometry.TwoDim
import Data.SG.Geometry.ThreeDim
import Data.SG.Matrix
import Data.SG.Shape