module QuantLib.Event (module QuantLib.Event ) where import QuantLib.Prices import QuantLib.Time.Date class Event a where evDate :: a->Date evOccured :: a->Date->Bool evOccured event date = (evDate event) < date evOccuredInclude:: a->Date->Bool evOccuredInclude event date = (evDate event) <= date evCompare :: a->a->Ordering evCompare x y | (evDate x) == (evDate y) = EQ | (evDate x) <= (evDate y) = LT | otherwise = GT evEqual :: a->a->Bool evEqual x y = (evDate x) == (evDate y) -- | Cash flows data type data CashFlow = CashFlow { cfDate :: Date, cfAmount :: Double } deriving (Show) instance Event CashFlow where evDate (CashFlow date _) = date instance Eq CashFlow where (==) = evEqual instance Ord CashFlow where compare = evCompare -- | Sequence of cash-flows type Leg = [CashFlow] data Callability = Call { cPrice :: CallPrice, cDate :: Date } | Put { cPrice :: CallPrice, cDate :: Date } deriving (Show) instance Event Callability where evDate = cDate instance Eq Callability where (==) = evEqual instance Ord Callability where compare = evCompare