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
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
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