#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
#endif
module Types ( Euler(..) ) where
import Control.Applicative ( Applicative(..) )
import Data.Data ( Data )
import Data.Foldable ( Foldable )
import Data.Traversable ( Traversable )
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
import GHC.Generics ( Generic )
import Data.Serialize ( Serialize )
import Data.Binary ( Binary )
#endif
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706
import GHC.Generics ( Generic1 )
#endif
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 708
import Data.Typeable ( Typeable )
#else
import Data.Typeable ( Typeable1 )
#endif
data Euler a = Euler { eYaw :: a
, ePitch :: a
, eRoll :: a
} deriving (Eq, Show, Functor, Foldable, Traversable, Ord
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
, Generic
#endif
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706
, Generic1
#endif
)
deriving instance Data a => Data (Euler a)
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 708
deriving instance Typeable Euler
#else
deriving instance Typeable1 Euler
#endif
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
instance Serialize a => Serialize (Euler a)
instance Binary a => Binary (Euler a)
#endif
instance Applicative Euler where
pure x = Euler x x x
Euler f0 f1 f2 <*> Euler x0 x1 x2 = Euler (f0 x0) (f1 x1) (f2 x2)