hquantlib-0.0.2.3: src/QuantLib/Instruments/Instrument.hs
{-# LANGUAGE ExistentialQuantification #-}
module QuantLib.Instruments.Instrument
( Instrument (..)
, CompositeInstrument (..)
) where
import Data.Time.LocalTime
import qualified Data.Map as M
import QuantLib.Priceable
-- | Instrument type class
class Instrument a where
iDate :: a -> LocalTime
iIsExpired :: a -> Bool
-- | Composite instrument is an aggregate of other instruments.
data CompositeInstrument = forall a . (Instrument a, Priceable a) => CompositeInstrument (M.Map a Double)
instance Priceable CompositeInstrument where
npv (CompositeInstrument xs) = M.foldrWithKey (\k x y -> y + npv k * x) 0.0 xs
errorEstimate _ = 0.0
instance Instrument CompositeInstrument where
iDate (CompositeInstrument xs) = (iDate . head . M.keys) xs
iIsExpired (CompositeInstrument xs) = (any iIsExpired . M.keys) xs