{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE AllowAmbiguousTypes#-} {-# LANGUAGE FunctionalDependencies #-} module Q.Options.ImpliedVol.TimeSlice ( module Q.Types , module Q.Options.ImpliedVol , TimeSlice(..) ) where import Q.Types import Q.Options.ImpliedVol import Q.Options.Black76 class TimeSlice v k where totalVar :: v -> k -> TotalVar instance TimeSlice (k -> TotalVar) k where totalVar :: (k -> TotalVar) -> k -> TotalVar totalVar k -> TotalVar f = k -> TotalVar f instance TimeSlice Black76 k where totalVar :: Black76 -> k -> TotalVar totalVar Black76{Vol DF YearFrac Forward b76Vol :: Black76 -> Vol b76T :: Black76 -> YearFrac b76DF :: Black76 -> DF b76F :: Black76 -> Forward b76Vol :: Vol b76T :: YearFrac b76DF :: DF b76F :: Forward ..} k _ = Double -> TotalVar TotalVar (Double -> TotalVar) -> Double -> TotalVar forall a b. (a -> b) -> a -> b $ Double vol Double -> Double -> Double forall a. Num a => a -> a -> a * Double vol Double -> Double -> Double forall a. Num a => a -> a -> a * Double t where (Vol Double vol) = Vol b76Vol (YearFrac Double t) = YearFrac b76T