packages feed

algebraic-0.1.0.2: src/Math/Coordinate/Coordinate.hs

{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DeriveDataTypeable #-}

module Math.Coordinate.Coordinate where

import           Data.Typeable                 (Typeable)

import GHC.Exts

-- convType is used to prevent context reduction stack overflow when combining with
-- automatic coordinate conversion
class CoordConversion convType sys space c1 c2 | sys c1 -> c2 where
    convertCoordBase :: convType -> sys -> space -> c1 -> c2


data ManualConversion = ManualConversion deriving Show
data AutoConversion = AutoConversion deriving Show

--convertCoord :: (CoordConversion AutoConversion sys a b, SpaceOf a space) => 
--             sys -> space -> a -> b
convertCoord = convertCoordBase AutoConversion