{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} module Data.Fixed.Binary.VectorSpace () where import Data.Bits import Data.AdditiveGroup import Data.AffineSpace import Data.Basis import Data.VectorSpace import Data.Fixed.Binary instance ( HasResolution r, Bits a, Bits (Super a), Integral a , Integral (Super a), SuperTypeable a) => AdditiveGroup (Fixed r a) where {-# INLINE zeroV #-} zeroV = 0 {-# INLINE (^+^) #-} (^+^) = (+) {-# INLINE negateV #-} negateV = negate instance ( HasResolution r, Bits a, Bits (Super a), Integral a , Integral (Super a), SuperTypeable a) => AffineSpace (Fixed r a) where type Diff (Fixed r a) = Fixed r a {-# INLINE (.-.) #-} (.-.) = (-) {-# INLINE (.+^) #-} (.+^) = (+) instance ( HasResolution r, Bits a, Bits (Super a), Integral a , Integral (Super a), SuperTypeable a) => HasBasis (Fixed r a) where type Basis (Fixed r a) = () {-# INLINE basisValue #-} basisValue ~() = 1 {-# INLINE decompose #-} decompose s = [((), s)] {-# INLINE decompose' #-} decompose' s = const s instance ( HasResolution r, Bits a, Bits (Super a), Integral a , Integral (Super a), SuperTypeable a) => VectorSpace (Fixed r a) where type Scalar (Fixed r a) = Fixed r a {-# INLINE (*^) #-} (*^) = (*) instance ( HasResolution r, Bits a, Bits (Super a), Integral a , Integral (Super a), SuperTypeable a) => InnerSpace (Fixed r a) where {-# INLINE (<.>) #-} (<.>) = (*)