{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} module Data.TimeSeries.Class ( TSeries(..), TSTimes, TSVector, TSValues, ) where import Data.Vector.Generic (Vector) import Data.UTime (UTime) ---------------------------------------- -- The main type class -- | The @hybrid-vector@ type backing the time series. type family TSVector (ts :: * -> *) :: * -> * -- | The @vector@ type backing the 'UTime's in the time series. type family TSTimes (ts :: * -> *) :: * -> * -- | The @vector@ type backing the values in the time series. type family TSValues (ts :: * -> *) :: * -> * -- | The time series type class, currently with two implementations: -- Boxed and Unboxed (Storable). -- -- The type variable @ts@ denotes the specific time series type and -- @a@ denotes the stored values. class (Vector (TSVector ts) (UTime, a), Vector (TSTimes ts) UTime, Vector (TSValues ts) a) => TSeries ts a where fromVector :: TSVector ts (UTime, a) -> ts a toVector :: ts a -> TSVector ts (UTime, a) tsTimes :: ts a -> TSTimes ts UTime tsValues :: ts a -> TSValues ts a -- | The two vectors are assumed to have the same length. This is -- not checked! fromTimesValues :: TSTimes ts UTime -> TSValues ts a -> ts a