never executed always true always false
    1 -- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
    2 -- Edit the ORIGNAL .chs file instead!
    3 
    4 
    5 module QuantLib.TermStructure.Credit
    6   (
    7     ProbabilityTrait(..)
    8   , DefaultProbabilityTermStructure
    9   , DefaultProbabilityHelper
   10   , factorSpreadedHazardRateCurve
   11   , flatHazardRate'
   12   , flatHazardRate
   13   , spreadedHazardRateCurve
   14   , defaultProbability
   15   , hazardRate'
   16   , hazardRate
   17   , survivalProbability'
   18   , survivalProbability
   19   , defaultDensity'
   20   , defaultDensity
   21   , defaultProbability'
   22   , defaultProbabilityBetween
   23   , defaultProbabilityBetween'
   24   , spreadCdsHelper
   25   , upfrontCdsHelper
   26   , interpolatedDefaultDensityCurve
   27   , interpolatedHazardRateCurve
   28   , interpolatedSurvivalProbabilityCurve
   29   , piecewiseDefaultCurve
   30   , piecewiseDefaultCurve'
   31   ) where
   32 import qualified Foreign.C.Types as C2HSImp
   33 import qualified Foreign.ForeignPtr as C2HSImp
   34 import qualified Foreign.Marshal.Utils as C2HSImp
   35 import qualified Foreign.Ptr as C2HSImp
   36 
   37 
   38 
   39 
   40 
   41 
   42 
   43 import QuantLib.Internal
   44 import QuantLib.Instrument(PricingModel)
   45 import QuantLib.Internal.Type
   46 import QuantLib.Time.Schedule(DateGenerationRule, Frequency)
   47 import QuantLib.Internal.Common
   48 
   49 data ProbabilityTrait = SurvivalProbability
   50                       | HazardRate
   51                       | DefaultDensity
   52   deriving (Show,Eq,Read)
   53 instance Enum ProbabilityTrait where
   54   succ SurvivalProbability = HazardRate
   55   succ HazardRate = DefaultDensity
   56   succ DefaultDensity = error "ProbabilityTrait.succ: DefaultDensity has no successor"
   57 
   58   pred HazardRate = SurvivalProbability
   59   pred DefaultDensity = HazardRate
   60   pred SurvivalProbability = error "ProbabilityTrait.pred: SurvivalProbability has no predecessor"
   61 
   62   enumFromTo from to = go from
   63     where
   64       end = fromEnum to
   65       go v = case compare (fromEnum v) end of
   66                  LT -> v : go (succ v)
   67                  EQ -> [v]
   68                  GT -> []
   69 
   70   enumFrom from = enumFromTo from DefaultDensity
   71 
   72   fromEnum SurvivalProbability = 0
   73   fromEnum HazardRate = 1
   74   fromEnum DefaultDensity = 2
   75 
   76   toEnum 0 = SurvivalProbability
   77   toEnum 1 = HazardRate
   78   toEnum 2 = DefaultDensity
   79   toEnum unmatched = error ("ProbabilityTrait.toEnum: Cannot match " ++ show unmatched)
   80 
   81 
   82 
   83 
   84 
   85 
   86 
   87 
   88 
   89 
   90 
   91 
   92 
   93 
   94 
   95 
   96 
   97 -- |a curve whose hazard rate is another curve's, scaled by a spread factor
   98 factorSpreadedHazardRateCurve :: (DefaultProbabilityTermStructure) -> (GenQuote q) -> IO ((DefaultProbabilityTermStructure))
   99 factorSpreadedHazardRateCurve a1 a2 =
  100   withGenTermStructure a1 $ \a1' -> 
  101   withQuote a2 $ \a2' -> 
  102   preErrorCheck $ \a3' -> 
  103   factorSpreadedHazardRateCurve'_ a1' a2' a3' >>= \res ->
  104   peekDefaultProbabilityTermStructure res >>= \res' ->
  105   errorCheck  a3'>>
  106   return (res')
  107 
  108 
  109 
  110 -- |flat hazard-rate curve anchored at a settlement date
  111 flatHazardRate' :: (Word) -> (Calendar) -> (GenQuote q) -> (DayCounter) -> IO ((DefaultProbabilityTermStructure))
  112 flatHazardRate' a1 a2 a3 a4 =
  113   let {a1' = fromIntegral a1} in 
  114   withCalendar a2 $ \a2' -> 
  115   withQuote a3 $ \a3' -> 
  116   withDayCounter a4 $ \a4' -> 
  117   preErrorCheck $ \a5' -> 
  118   flatHazardRate''_ a1' a2' a3' a4' a5' >>= \res ->
  119   peekDefaultProbabilityTermStructure res >>= \res' ->
  120   errorCheck  a5'>>
  121   return (res')
  122 
  123 
  124 
  125 -- |flat hazard-rate curve anchored at a reference date
  126 flatHazardRate :: (Day) -> (GenQuote q) -> (DayCounter) -> IO ((DefaultProbabilityTermStructure))
  127 flatHazardRate a1 a2 a3 =
  128   withDay a1 $ \a1' -> 
  129   withQuote a2 $ \a2' -> 
  130   withDayCounter a3 $ \a3' -> 
  131   preErrorCheck $ \a4' -> 
  132   flatHazardRate'_ a1' a2' a3' a4' >>= \res ->
  133   peekDefaultProbabilityTermStructure res >>= \res' ->
  134   errorCheck  a4'>>
  135   return (res')
  136 
  137 
  138 
  139 -- |a curve whose survival probability is another curve's, multiplied by a spread factor
  140 spreadedHazardRateCurve :: (DefaultProbabilityTermStructure) -> (GenQuote q) -> IO ((DefaultProbabilityTermStructure))
  141 spreadedHazardRateCurve a1 a2 =
  142   withGenTermStructure a1 $ \a1' -> 
  143   withQuote a2 $ \a2' -> 
  144   preErrorCheck $ \a3' -> 
  145   spreadedHazardRateCurve'_ a1' a2' a3' >>= \res ->
  146   peekDefaultProbabilityTermStructure res >>= \res' ->
  147   errorCheck  a3'>>
  148   return (res')
  149 
  150 
  151 
  152 -- |default probability from the reference date until a given date
  153 defaultProbability :: (DefaultProbabilityTermStructure) -> (Day) -> (Bool) -- ^extrapolate
  154  -> IO ((Double))
  155 defaultProbability a1 a2 a3 =
  156   withGenTermStructure a1 $ \a1' -> 
  157   withDay a2 $ \a2' -> 
  158   let {a3' = C2HSImp.fromBool a3} in 
  159   preErrorCheck $ \a4' -> 
  160   defaultProbability'_ a1' a2' a3' a4' >>= \res ->
  161   let {res' = realToFrac res} in
  162   errorCheck  a4'>>
  163   return (res')
  164 
  165 
  166 
  167 -- |hazard rate at a given time, with annual frequency and continuous compounding
  168 hazardRate' :: (DefaultProbabilityTermStructure) -> (Double) -> (Bool) -- ^extrapolate
  169  -> IO ((Double))
  170 hazardRate' a1 a2 a3 =
  171   withGenTermStructure a1 $ \a1' -> 
  172   let {a2' = realToFrac a2} in 
  173   let {a3' = C2HSImp.fromBool a3} in 
  174   preErrorCheck $ \a4' -> 
  175   hazardRate''_ a1' a2' a3' a4' >>= \res ->
  176   let {res' = realToFrac res} in
  177   errorCheck  a4'>>
  178   return (res')
  179 
  180 
  181 
  182 -- |hazard rate at a given date, with annual frequency and continuous compounding
  183 hazardRate :: (DefaultProbabilityTermStructure) -> (Day) -> (Bool) -- ^extrapolate
  184  -> IO ((Double))
  185 hazardRate a1 a2 a3 =
  186   withGenTermStructure a1 $ \a1' -> 
  187   withDay a2 $ \a2' -> 
  188   let {a3' = C2HSImp.fromBool a3} in 
  189   preErrorCheck $ \a4' -> 
  190   hazardRate'_ a1' a2' a3' a4' >>= \res ->
  191   let {res' = realToFrac res} in
  192   errorCheck  a4'>>
  193   return (res')
  194 
  195 
  196 
  197 -- |The same day-counting rule used by the term structure should be used for calculating the passed time t.
  198 survivalProbability' :: (DefaultProbabilityTermStructure) -> (Double) -> (Bool) -- ^extrapolate
  199  -> IO ((Double))
  200 survivalProbability' a1 a2 a3 =
  201   withGenTermStructure a1 $ \a1' -> 
  202   let {a2' = realToFrac a2} in 
  203   let {a3' = C2HSImp.fromBool a3} in 
  204   preErrorCheck $ \a4' -> 
  205   survivalProbability''_ a1' a2' a3' a4' >>= \res ->
  206   let {res' = realToFrac res} in
  207   errorCheck  a4'>>
  208   return (res')
  209 
  210 
  211 
  212 -- |survival probability from the reference date until a given date
  213 survivalProbability :: (DefaultProbabilityTermStructure) -> (Day) -> (Bool) -- ^extrapolate
  214  -> IO ((Double))
  215 survivalProbability a1 a2 a3 =
  216   withGenTermStructure a1 $ \a1' -> 
  217   withDay a2 $ \a2' -> 
  218   let {a3' = C2HSImp.fromBool a3} in 
  219   preErrorCheck $ \a4' -> 
  220   survivalProbability'_ a1' a2' a3' a4' >>= \res ->
  221   let {res' = realToFrac res} in
  222   errorCheck  a4'>>
  223   return (res')
  224 
  225 
  226 
  227 -- |The same day-counting rule used by the term structure should be used for calculating the passed time t.
  228 defaultDensity' :: (DefaultProbabilityTermStructure) -> (Double) -> (Bool) -- ^extrapolate
  229  -> IO ((Double))
  230 defaultDensity' a1 a2 a3 =
  231   withGenTermStructure a1 $ \a1' -> 
  232   let {a2' = realToFrac a2} in 
  233   let {a3' = C2HSImp.fromBool a3} in 
  234   preErrorCheck $ \a4' -> 
  235   defaultDensity''_ a1' a2' a3' a4' >>= \res ->
  236   let {res' = realToFrac res} in
  237   errorCheck  a4'>>
  238   return (res')
  239 
  240 
  241 
  242 -- |default density at a given date
  243 defaultDensity :: (DefaultProbabilityTermStructure) -> (Day) -> (Bool) -- ^extrapolate
  244  -> IO ((Double))
  245 defaultDensity a1 a2 a3 =
  246   withGenTermStructure a1 $ \a1' -> 
  247   withDay a2 $ \a2' -> 
  248   let {a3' = C2HSImp.fromBool a3} in 
  249   preErrorCheck $ \a4' -> 
  250   defaultDensity'_ a1' a2' a3' a4' >>= \res ->
  251   let {res' = realToFrac res} in
  252   errorCheck  a4'>>
  253   return (res')
  254 
  255 
  256 
  257 -- |The same day-counting rule used by the term structure should be used for calculating the passed time t.
  258 defaultProbability' :: (DefaultProbabilityTermStructure) -> (Double) -> (Bool) -- ^extrapolate
  259  -> IO ((Double))
  260 defaultProbability' a1 a2 a3 =
  261   withGenTermStructure a1 $ \a1' -> 
  262   let {a2' = realToFrac a2} in 
  263   let {a3' = C2HSImp.fromBool a3} in 
  264   preErrorCheck $ \a4' -> 
  265   defaultProbability''_ a1' a2' a3' a4' >>= \res ->
  266   let {res' = realToFrac res} in
  267   errorCheck  a4'>>
  268   return (res')
  269 
  270 
  271 
  272 -- |probability of default between two given dates
  273 defaultProbabilityBetween :: (DefaultProbabilityTermStructure) -> (Day) -> (Day) -> (Bool) -- ^extrapolate
  274  -> IO ((Double))
  275 defaultProbabilityBetween a1 a2 a3 a4 =
  276   withGenTermStructure a1 $ \a1' -> 
  277   withDay a2 $ \a2' -> 
  278   withDay a3 $ \a3' -> 
  279   let {a4' = C2HSImp.fromBool a4} in 
  280   preErrorCheck $ \a5' -> 
  281   defaultProbabilityBetween'_ a1' a2' a3' a4' a5' >>= \res ->
  282   let {res' = realToFrac res} in
  283   errorCheck  a5'>>
  284   return (res')
  285 
  286 
  287 
  288 -- |probability of default between two given times
  289 defaultProbabilityBetween' :: (DefaultProbabilityTermStructure) -> (Double) -> (Double) -> (Bool) -- ^extrapolate
  290  -> IO ((Double))
  291 defaultProbabilityBetween' a1 a2 a3 a4 =
  292   withGenTermStructure a1 $ \a1' -> 
  293   let {a2' = realToFrac a2} in 
  294   let {a3' = realToFrac a3} in 
  295   let {a4' = C2HSImp.fromBool a4} in 
  296   preErrorCheck $ \a5' -> 
  297   defaultProbabilityBetween''_ a1' a2' a3' a4' a5' >>= \res ->
  298   let {res' = realToFrac res} in
  299   errorCheck  a5'>>
  300   return (res')
  301 
  302 
  303 
  304 -- |bootstrap helper for a CDS quoted by running spread
  305 spreadCdsHelper :: (GenQuote q) -- ^runningSpread
  306  -> ((Word,TimeUnit)) -- ^tenor
  307  -> (Int) -- ^settlementDays
  308  -> (Calendar) -> (Frequency) -> (BusinessDayConvention) -> (DateGenerationRule) -> (DayCounter) -> (Double) -- recoveryRate
  309  -> (GenYieldTermStructure y) -- ^discountCurve
  310  -> (Bool) -- ^settlesAccrual
  311  -> (Bool) -- ^paysAtDefaultTime
  312  -> (Maybe Day) -- ^startDate
  313  -> (DayCounter) -- ^lastPeriodDayCounter
  314  -> (Bool) -- ^rebatesAccrual
  315  -> (PricingModel) -- ^model
  316  -> IO ((DefaultProbabilityHelper))
  317 spreadCdsHelper a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 =
  318   withQuote a1 $ \a1' -> 
  319   let {(a2'1, a2'2) = fromEnumQuantity a2} in 
  320   let {a3' = fromIntegral a3} in 
  321   withCalendar a4 $ \a4' -> 
  322   let {a5' = (fromIntegral . fromEnum) a5} in 
  323   let {a6' = fromEnumC a6} in 
  324   let {a7' = (fromIntegral . fromEnum) a7} in 
  325   withDayCounter a8 $ \a8' -> 
  326   let {a9' = realToFrac a9} in 
  327   withYieldTermStructure a10 $ \a10' -> 
  328   let {a11' = C2HSImp.fromBool a11} in 
  329   let {a12' = C2HSImp.fromBool a12} in 
  330   withMaybeDay a13 $ \a13' -> 
  331   withDayCounter a14 $ \a14' -> 
  332   let {a15' = C2HSImp.fromBool a15} in 
  333   let {a16' = (fromIntegral . fromEnum) a16} in 
  334   preErrorCheck $ \a17' -> 
  335   spreadCdsHelper'_ a1' a2'1  a2'2 a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' >>= \res ->
  336   peekDefaultProbabilityHelper res >>= \res' ->
  337   errorCheck  a17'>>
  338   return (res')
  339 
  340 
  341 
  342 -- |the upfront must be quoted in fractional units.
  343 upfrontCdsHelper :: (GenQuote q) -- ^upfront
  344  -> (Double) -- ^runningSpread
  345  -> ((Word,TimeUnit)) -- ^tenor
  346  -> (Int) -- ^settlementDays
  347  -> (Calendar) -> (Frequency) -> (BusinessDayConvention) -> (DateGenerationRule) -> (DayCounter) -> (Double) -- ^recoveryDate
  348  -> (GenYieldTermStructure y) -- ^discountCurve
  349  -> (Word) -- ^upfrontSettlementDays
  350  -> (Bool) -- &settlesAccrual
  351  -> (Bool) -- ^paysAtDefaultTime
  352  -> (Maybe Day) -- ^startDate
  353  -> (DayCounter) -- ^lastPeriodDayCounter
  354  -> (Bool) -- ^rebatesAccrual
  355  -> (PricingModel) -- ^model
  356  -> IO ((DefaultProbabilityHelper))
  357 upfrontCdsHelper a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 =
  358   withQuote a1 $ \a1' -> 
  359   let {a2' = realToFrac a2} in 
  360   let {(a3'1, a3'2) = fromEnumQuantity a3} in 
  361   let {a4' = fromIntegral a4} in 
  362   withCalendar a5 $ \a5' -> 
  363   let {a6' = (fromIntegral . fromEnum) a6} in 
  364   let {a7' = fromEnumC a7} in 
  365   let {a8' = (fromIntegral . fromEnum) a8} in 
  366   withDayCounter a9 $ \a9' -> 
  367   let {a10' = realToFrac a10} in 
  368   withYieldTermStructure a11 $ \a11' -> 
  369   let {a12' = fromIntegral a12} in 
  370   let {a13' = C2HSImp.fromBool a13} in 
  371   let {a14' = C2HSImp.fromBool a14} in 
  372   withMaybeDay a15 $ \a15' -> 
  373   withDayCounter a16 $ \a16' -> 
  374   let {a17' = C2HSImp.fromBool a17} in 
  375   let {a18' = (fromIntegral . fromEnum) a18} in 
  376   preErrorCheck $ \a19' -> 
  377   upfrontCdsHelper'_ a1' a2' a3'1  a3'2 a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  378   peekDefaultProbabilityHelper res >>= \res' ->
  379   errorCheck  a19'>>
  380   return (res')
  381 
  382 
  383 
  384 interpolatedDefaultDensityCurve :: [(Day, Double)] -> DayCounter -> Calendar -> [(Day, GenQuote q)] -- ^jumps
  385   -> Interpolation -> IO DefaultProbabilityTermStructure
  386 interpolatedDefaultDensityCurve d dc c q i = uncurryNested (qlInterpolatedDefaultDensityCurve dd dq dc c qq qd) (qlInterpolation i) where {(qd, qq) = unzip q; (dd, dq) = unzip d}
  387 
  388 -- |default-probability term structure built by interpolating default densities at given dates
  389 qlInterpolatedDefaultDensityCurve :: ([Day]) -> ([Double]) -> (DayCounter) -> (Calendar) -> ([GenQuote q]) -> ([Day]) -> (Int) -> (Int) -> (Int) -> IO ((DefaultProbabilityTermStructure))
  390 qlInterpolatedDefaultDensityCurve a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  391   withDayArray a1 $ \(a1'1, a1'2) -> 
  392   withDoubleArray a2 $ \(a2'1, a2'2) -> 
  393   withDayCounter a3 $ \a3' -> 
  394   withCalendar a4 $ \a4' -> 
  395   withQuoteArray a5 $ \(a5'1, a5'2) -> 
  396   withDayArray a6 $ \(a6'1, a6'2) -> 
  397   let {a7' = fromIntegral a7} in 
  398   let {a8' = fromIntegral a8} in 
  399   let {a9' = fromIntegral a9} in 
  400   preErrorCheck $ \a10' -> 
  401   qlInterpolatedDefaultDensityCurve'_ a1'1  a1'2 a2'1  a2'2 a3' a4' a5'1  a5'2 a6'1  a6'2 a7' a8' a9' a10' >>= \res ->
  402   peekDefaultProbabilityTermStructure res >>= \res' ->
  403   errorCheck  a10'>>
  404   return (res')
  405 
  406 
  407 
  408 interpolatedHazardRateCurve :: [(Day, Double)] -> DayCounter -> Calendar -> [(Day, GenQuote q)] -- ^jumps
  409   -> Interpolation
  410   -> Bool -- ^extrapolate past the curve's max date
  411   -> IO DefaultProbabilityTermStructure
  412 interpolatedHazardRateCurve d dc c q i ex = uncurryNested (qlInterpolatedHazardRateCurve dd dq dc c qq qd) (qlInterpolation i) ex where {(qd, qq) = unzip q; (dd, dq) = unzip d}
  413 
  414 -- |default-probability term structure built by interpolating hazard rates at given dates
  415 qlInterpolatedHazardRateCurve :: ([Day]) -> ([Double]) -> (DayCounter) -> (Calendar) -> ([GenQuote q]) -> ([Day]) -> (Int) -> (Int) -> (Int) -> (Bool) -> IO ((DefaultProbabilityTermStructure))
  416 qlInterpolatedHazardRateCurve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
  417   withDayArray a1 $ \(a1'1, a1'2) -> 
  418   withDoubleArray a2 $ \(a2'1, a2'2) -> 
  419   withDayCounter a3 $ \a3' -> 
  420   withCalendar a4 $ \a4' -> 
  421   withQuoteArray a5 $ \(a5'1, a5'2) -> 
  422   withDayArray a6 $ \(a6'1, a6'2) -> 
  423   let {a7' = fromIntegral a7} in 
  424   let {a8' = fromIntegral a8} in 
  425   let {a9' = fromIntegral a9} in 
  426   let {a10' = C2HSImp.fromBool a10} in 
  427   preErrorCheck $ \a11' -> 
  428   qlInterpolatedHazardRateCurve'_ a1'1  a1'2 a2'1  a2'2 a3' a4' a5'1  a5'2 a6'1  a6'2 a7' a8' a9' a10' a11' >>= \res ->
  429   peekDefaultProbabilityTermStructure res >>= \res' ->
  430   errorCheck  a11'>>
  431   return (res')
  432 
  433 
  434 
  435 interpolatedSurvivalProbabilityCurve :: [(Day, Double)] -> DayCounter -> Calendar -> [(Day, GenQuote q)] -- ^jumps
  436   -> Interpolation -> IO DefaultProbabilityTermStructure
  437 interpolatedSurvivalProbabilityCurve d dc c q i = uncurryNested (qlInterpolatedSurvivalProbabilityCurve dd dq dc c qq qd) (qlInterpolation i) where {(qd, qq) = unzip q; (dd, dq) = unzip d}
  438 
  439 -- |default-probability term structure built by interpolating survival probabilities at given dates
  440 qlInterpolatedSurvivalProbabilityCurve :: ([Day]) -> ([Double]) -> (DayCounter) -> (Calendar) -> ([GenQuote q]) -> ([Day]) -> (Int) -> (Int) -> (Int) -> IO ((DefaultProbabilityTermStructure))
  441 qlInterpolatedSurvivalProbabilityCurve a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  442   withDayArray a1 $ \(a1'1, a1'2) -> 
  443   withDoubleArray a2 $ \(a2'1, a2'2) -> 
  444   withDayCounter a3 $ \a3' -> 
  445   withCalendar a4 $ \a4' -> 
  446   withQuoteArray a5 $ \(a5'1, a5'2) -> 
  447   withDayArray a6 $ \(a6'1, a6'2) -> 
  448   let {a7' = fromIntegral a7} in 
  449   let {a8' = fromIntegral a8} in 
  450   let {a9' = fromIntegral a9} in 
  451   preErrorCheck $ \a10' -> 
  452   qlInterpolatedSurvivalProbabilityCurve'_ a1'1  a1'2 a2'1  a2'2 a3' a4' a5'1  a5'2 a6'1  a6'2 a7' a8' a9' a10' >>= \res ->
  453   peekDefaultProbabilityTermStructure res >>= \res' ->
  454   errorCheck  a10'>>
  455   return (res')
  456 
  457 
  458 
  459 piecewiseDefaultCurve :: Day -> [DefaultProbabilityHelper] -> DayCounter -> [(Day, GenQuote q)] -- ^jumps
  460   -> ProbabilityTrait -> Interpolation -> IO DefaultProbabilityTermStructure
  461 piecewiseDefaultCurve d h dc q t i = uncurryNested (qlPiecewiseDefaultCurve d h dc qq qd t) (qlInterpolation i) where (qd, qq) = unzip q
  462 -- |default-probability term structure bootstrapped from CDS/default helpers, anchored at an explicit reference date
  463 qlPiecewiseDefaultCurve :: (Day) -> ([DefaultProbabilityHelper]) -> (DayCounter) -> ([GenQuote q]) -> ([Day]) -> (ProbabilityTrait) -> (Int) -> (Int) -> (Int) -> IO ((DefaultProbabilityTermStructure))
  464 qlPiecewiseDefaultCurve a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  465   withDay a1 $ \a1' -> 
  466   withDefaultProbabilityHelperArray a2 $ \(a2'1, a2'2) -> 
  467   withDayCounter a3 $ \a3' -> 
  468   withQuoteArray a4 $ \(a4'1, a4'2) -> 
  469   withDayArray a5 $ \(a5'1, a5'2) -> 
  470   let {a6' = (fromIntegral . fromEnum) a6} in 
  471   let {a7' = fromIntegral a7} in 
  472   let {a8' = fromIntegral a8} in 
  473   let {a9' = fromIntegral a9} in 
  474   preErrorCheck $ \a10' -> 
  475   qlPiecewiseDefaultCurve'_ a1' a2'1  a2'2 a3' a4'1  a4'2 a5'1  a5'2 a6' a7' a8' a9' a10' >>= \res ->
  476   peekDefaultProbabilityTermStructure res >>= \res' ->
  477   errorCheck  a10'>>
  478   return (res')
  479 
  480 
  481 
  482 piecewiseDefaultCurve' :: Word -> Calendar -> [DefaultProbabilityHelper] -> DayCounter -> [(Day, GenQuote q)] -- ^jumps
  483   -> ProbabilityTrait -> Interpolation -> IO DefaultProbabilityTermStructure
  484 piecewiseDefaultCurve' d c h dc q t i = uncurryNested (qlPiecewiseDefaultCurve1 d c h dc qq qd t) (qlInterpolation i) where (qd, qq) = unzip q
  485 -- |default-probability term structure bootstrapped from CDS/default helpers, anchored at a settlement-days/calendar pair
  486 qlPiecewiseDefaultCurve1 :: (Word) -> (Calendar) -> ([DefaultProbabilityHelper]) -> (DayCounter) -> ([GenQuote q]) -> ([Day]) -> (ProbabilityTrait) -> (Int) -> (Int) -> (Int) -> IO ((DefaultProbabilityTermStructure))
  487 qlPiecewiseDefaultCurve1 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 =
  488   let {a1' = fromIntegral a1} in 
  489   withCalendar a2 $ \a2' -> 
  490   withDefaultProbabilityHelperArray a3 $ \(a3'1, a3'2) -> 
  491   withDayCounter a4 $ \a4' -> 
  492   withQuoteArray a5 $ \(a5'1, a5'2) -> 
  493   withDayArray a6 $ \(a6'1, a6'2) -> 
  494   let {a7' = (fromIntegral . fromEnum) a7} in 
  495   let {a8' = fromIntegral a8} in 
  496   let {a9' = fromIntegral a9} in 
  497   let {a10' = fromIntegral a10} in 
  498   preErrorCheck $ \a11' -> 
  499   qlPiecewiseDefaultCurve1'_ a1' a2' a3'1  a3'2 a4' a5'1  a5'2 a6'1  a6'2 a7' a8' a9' a10' a11' >>= \res ->
  500   peekDefaultProbabilityTermStructure res >>= \res' ->
  501   errorCheck  a11'>>
  502   return (res')
  503 
  504 
  505 
  506 -- vim: set ff=unix ts=8 sts=2 sw=2 et:
  507 
  508 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlFactorSpreadedHazardRateCurve"
  509   factorSpreadedHazardRateCurve'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> ((C2HSImp.Ptr (CQuote')) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure'))))))
  510 
  511 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlFlatHazardRate1"
  512   flatHazardRate''_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (CCalendar)) -> ((C2HSImp.Ptr (CQuote')) -> ((C2HSImp.Ptr (CDayCounter)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure'))))))))
  513 
  514 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlFlatHazardRate"
  515   flatHazardRate'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr (CQuote')) -> ((C2HSImp.Ptr (CDayCounter)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure')))))))
  516 
  517 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlSpreadedHazardRateCurve"
  518   spreadedHazardRateCurve'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> ((C2HSImp.Ptr (CQuote')) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure'))))))
  519 
  520 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureDefaultProbability"
  521   defaultProbability'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  522 
  523 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureHazardRate1"
  524   hazardRate''_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CDouble -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  525 
  526 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureHazardRate"
  527   hazardRate'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  528 
  529 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureSurvivalProbability1"
  530   survivalProbability''_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CDouble -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  531 
  532 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureSurvivalProbability"
  533   survivalProbability'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  534 
  535 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureDefaultDensity1"
  536   defaultDensity''_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CDouble -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  537 
  538 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureDefaultDensity"
  539   defaultDensity'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  540 
  541 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureDefaultProbability1"
  542   defaultProbability''_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CDouble -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
  543 
  544 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureDefaultProbability2"
  545   defaultProbabilityBetween'_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble))))))
  546 
  547 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlDefaultProbabilityTermStructureDefaultProbability3"
  548   defaultProbabilityBetween''_ :: ((C2HSImp.Ptr (CDefaultProbabilityTermStructure')) -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble))))))
  549 
  550 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlSpreadCdsHelper"
  551   spreadCdsHelper'_ :: ((C2HSImp.Ptr (CQuote')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (CCalendar)) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (CDayCounter)) -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (CYieldTermStructure')) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (CDayCounter)) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityHelper)))))))))))))))))))))
  552 
  553 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlUpfrontCdsHelper"
  554   upfrontCdsHelper'_ :: ((C2HSImp.Ptr (CQuote')) -> (C2HSImp.CDouble -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (CCalendar)) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (CDayCounter)) -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (CYieldTermStructure')) -> (C2HSImp.CUInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (CDayCounter)) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityHelper)))))))))))))))))))))))
  555 
  556 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlInterpolatedDefaultDensityCurve"
  557   qlInterpolatedDefaultDensityCurve'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (CDayCounter)) -> ((C2HSImp.Ptr (CCalendar)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CQuote'))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure')))))))))))))))))
  558 
  559 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlInterpolatedHazardRateCurve"
  560   qlInterpolatedHazardRateCurve'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (CDayCounter)) -> ((C2HSImp.Ptr (CCalendar)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CQuote'))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure'))))))))))))))))))
  561 
  562 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlInterpolatedSurvivalProbabilityCurve"
  563   qlInterpolatedSurvivalProbabilityCurve'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (CDayCounter)) -> ((C2HSImp.Ptr (CCalendar)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CQuote'))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure')))))))))))))))))
  564 
  565 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlPiecewiseDefaultCurve"
  566   qlPiecewiseDefaultCurve'_ :: (C2HSImp.CInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CDefaultProbabilityHelper))) -> ((C2HSImp.Ptr (CDayCounter)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CQuote'))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure'))))))))))))))))
  567 
  568 foreign import ccall safe "QuantLib/TermStructure/Credit.chs.h qlPiecewiseDefaultCurve1"
  569   qlPiecewiseDefaultCurve1'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (CCalendar)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CDefaultProbabilityHelper))) -> ((C2HSImp.Ptr (CDayCounter)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CQuote'))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CDefaultProbabilityTermStructure')))))))))))))))))