linear 0.9 → 0.9.1
raw patch · 2 files changed
+134/−1 lines, 2 filesdep +base-orphansdep ~base
Dependencies added: base-orphans
Dependency ranges changed: base
Files
- linear.cabal +2/−1
- src/Linear/V0.hs +132/−0
linear.cabal view
@@ -1,6 +1,6 @@ name: linear category: Math, Algebra-version: 0.9+version: 0.9.1 license: BSD3 cabal-version: >= 1.8 license-file: LICENSE@@ -49,6 +49,7 @@ Linear.Metric Linear.Plucker Linear.Quaternion+ Linear.V0 Linear.V2 Linear.V3 Linear.V4
+ src/Linear/V0.hs view
@@ -0,0 +1,132 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ScopedTypeVariables #-}+-----------------------------------------------------------------------------+-- |+-- Module : Linear.V0+-- Copyright : (C) 2012-2013 Edward Kmett,+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- 0-D Vectors+----------------------------------------------------------------------------+module Linear.V0+ ( V0(..)+ ) where++import Control.Applicative+import Data.Data+import Data.Distributive+import Data.Foldable+import Data.Ix+import Data.Traversable+import Data.Semigroup+import Data.Functor.Bind+import Foreign.Storable (Storable(..))+import Linear.Core+import Linear.Metric+import Linear.Epsilon+import Linear.Vector+import Prelude hiding (sum)++-- $setup+-- >>> import Control.Lens++-- | A 0-dimensional vector+--+-- >>> pure 1 :: V0 Int+-- V0+--+-- >>> V0 + V0+-- V0+--+data V0 a = V0 deriving (Eq,Ord,Show,Read,Ix,Enum,Data,Typeable)++instance Functor V0 where+ fmap _ V0 = V0+ {-# INLINE fmap #-}+ _ <$ _ = V0+ {-# INLINE (<$) #-}++instance Foldable V0 where+ foldMap _ V0 = mempty+ {-# INLINE foldMap #-}++instance Traversable V0 where+ traverse _ V0 = pure V0+ {-# INLINE traverse #-}++instance Apply V0 where+ V0 <.> V0 = V0+ {-@ INLINE (<.>) #-}++instance Applicative V0 where+ pure _ = V0+ {-# INLINE pure #-}+ V0 <*> V0 = V0+ {-@ INLINE (<*>) #-}++instance Additive V0++instance Bind V0 where+ V0 >>- _ = V0+ {-# INLINE (>>-) #-}++instance Monad V0 where+ return _ = V0+ {-# INLINE return #-}+ V0 >>= _ = V0+ {-# INLINE (>>=) #-}++instance Num (V0 a) where+ V0 + V0 = V0+ {-# INLINE (+) #-}+ V0 - V0 = V0+ {-# INLINE (-) #-}+ V0 * V0 = V0+ {-# INLINE (*) #-}+ negate V0 = V0+ {-# INLINE negate #-}+ abs V0 = V0+ {-# INLINE abs #-}+ signum V0 = V0+ {-# INLINE signum #-}+ fromInteger _ = V0+ {-# INLINE fromInteger #-}++instance Fractional (V0 a) where+ recip _ = V0+ {-# INLINE recip #-}+ V0 / V0 = V0+ {-# INLINE (/) #-}+ fromRational _ = V0+ {-# INLINE fromRational #-}++instance Metric V0 where+ dot V0 V0 = 0+ {-# INLINE dot #-}++instance Core V0 where+ core _ = V0+ {-# INLINE core #-}++instance Distributive V0 where+ distribute _ = V0+ {-# INLINE distribute #-}++instance Epsilon a => Epsilon (V0 a) where+ nearZero _ = True+ {-# INLINE nearZero #-}++instance Storable a => Storable (V0 a) where+ sizeOf _ = 0+ {-# INLINE sizeOf #-}+ alignment _ = 1+ {-# INLINE alignment #-}+ poke _ V0 = return ()+ {-# INLINE poke #-}+ peek _ = return V0+ {-# INLINE peek #-}