quantfin-0.2.0.0: src/Quant/Types.hs
module Quant.Types (
CashFlow(..)
, Observables1(..)
, Observables2(..)
, Observables3(..)
, Observables4(..)
, Observables5(..)
, OptionType(..)
, Obs1(..)
, Obs2(..)
, Obs3(..)
, Obs4(..)
, Obs5(..)
) where
import Quant.Time
-- | A CashFlow is just a time and an amount.
data CashFlow = CashFlow {
cfTime :: Time
, cfAmount :: Double
}
-- | Type for Put or Calls
data OptionType = Put | Call deriving (Eq,Show)
-- | Single-observable container.
data Observables1 = Observables1 {-# UNPACK #-} !Double
-- | Two observable container.
data Observables2 = Observables2 {-# UNPACK #-} !Double {-# UNPACK #-} !Double
-- | Three observable container.
data Observables3 = Observables3 {-# UNPACK #-} !Double {-# UNPACK #-} !Double
{-# UNPACK #-} !Double
-- | Four observable container.
data Observables4 = Observables4 {-# UNPACK #-} !Double {-# UNPACK #-} !Double
{-# UNPACK #-} !Double {-# UNPACK #-} !Double
-- | Five observable container.
data Observables5 = Observables5 {-# UNPACK #-} !Double {-# UNPACK #-} !Double
{-# UNPACK #-} !Double {-# UNPACK #-} !Double
{-# UNPACK #-} !Double
class Obs1 a where
get1 :: a -> Double
class (Obs1 a) => Obs2 a where
get2 :: a -> Double
class (Obs2 a) => Obs3 a where
get3 :: a -> Double
class (Obs3 a) => Obs4 a where
get4 :: a -> Double
class (Obs4 a) => Obs5 a where
get5 :: a -> Double
instance Obs1 Observables1 where
get1 (Observables1 x) = x
{-# INLINE get1 #-}
instance Obs1 Observables2 where
get1 (Observables2 x _) = x
{-# INLINE get1 #-}
instance Obs1 Observables3 where
get1 (Observables3 x _ _) = x
{-# INLINE get1 #-}
instance Obs1 Observables4 where
get1 (Observables4 x _ _ _) = x
{-# INLINE get1 #-}
instance Obs1 Observables5 where
get1 (Observables5 x _ _ _ _) = x
{-# INLINE get1 #-}
instance Obs2 Observables2 where
get2 (Observables2 _ x) = x
{-# INLINE get2 #-}
instance Obs2 Observables3 where
get2 (Observables3 _ x _) = x
{-# INLINE get2 #-}
instance Obs2 Observables4 where
get2 (Observables4 _ x _ _) = x
{-# INLINE get2 #-}
instance Obs2 Observables5 where
get2 (Observables5 _ x _ _ _) = x
{-# INLINE get2 #-}
instance Obs3 Observables3 where
get3 (Observables3 _ _ x) = x
{-# INLINE get3 #-}
instance Obs3 Observables4 where
get3 (Observables4 _ _ x _) = x
{-# INLINE get3 #-}
instance Obs3 Observables5 where
get3 (Observables5 _ _ x _ _) = x
{-# INLINE get3 #-}
instance Obs4 Observables4 where
get4 (Observables4 _ _ _ x) = x
{-# INLINE get4 #-}
instance Obs4 Observables5 where
get4 (Observables5 _ _ _ x _) = x
{-# INLINE get4 #-}
instance Obs5 Observables5 where
get5 (Observables5 _ _ _ _ x) = x
{-# INLINE get5 #-}