-- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./QuantLib/Internal/CalendarEnum.chs" #-}
{-# LANGUAGE TemplateHaskell, StandaloneDeriving #-}
-- suppress warnings about unused Extra_ constructors
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
module QuantLib.Internal.CalendarEnum
  (
    mapCalendar
  , CalendarConstructor(..)
  , JointCalendarRule(..)
  , readCalendarConstructorPlain

  , mapDayCounter
  , DayCounterConstructor(..)
  , readDayCounterConstructorPlain
  ) where






import QuantLib.Internal.Syntax
import QuantLib.Internal.Type
import QuantLib.Time.Date(Weekday)

data JointCalendarRule = JoinHolidays
                       | JoinBusinessDays
  deriving (Enum,Show,Eq,Read)

{-# LINE 23 "./QuantLib/Internal/CalendarEnum.chs" #-}

data CalendarCountry = Country__Argentina
                     | Country__Australia
                     | Country__Austria
                     | Country__Botswana
                     | Country__Brazil
                     | Country__Canada
                     | Country__China
                     | Country__CzechRepublic
                     | Country__Denmark
                     | Country__Finland
                     | Country__France
                     | Country__Germany
                     | Country__HongKong
                     | Country__Hungary
                     | Country__Iceland
                     | Country__India
                     | Country__Indonesia
                     | Country__Israel
                     | Country__Italy
                     | Country__Japan
                     | Country__Mexico
                     | Country__NewZealand
                     | Country__Norway
                     | Country__Null
                     | Country__Poland
                     | Country__Romania
                     | Country__Russia
                     | Country__SaudiArabia
                     | Country__Singapore
                     | Country__Slovakia
                     | Country__SouthAfrica
                     | Country__SouthKorea
                     | Country__Sweden
                     | Country__Switzerland
                     | Country__Taiwan
                     | Country__TARGET
                     | Country__Thailand
                     | Country__Turkey
                     | Country__Ukraine
                     | Country__UnitedKingdom
                     | Country__UnitedStates
                     | Country__WeekendsOnly
                     | Country__Chile
                     | Country__Croatia
                     | Country__Malta
                     | Country__Montenegro
                     | Country__NorthMacedonia
                     | Country__Serbia
                     | Country__Slovenia
                     | Country__Uzbekistan
  deriving (Show,Eq,Read)
instance Enum CalendarCountry where
  succ :: CalendarCountry -> CalendarCountry
succ CalendarCountry
Country__Argentina = CalendarCountry
Country__Australia
  succ CalendarCountry
Country__Australia = CalendarCountry
Country__Austria
  succ CalendarCountry
Country__Austria = CalendarCountry
Country__Botswana
  succ CalendarCountry
Country__Botswana = CalendarCountry
Country__Brazil
  succ CalendarCountry
Country__Brazil = CalendarCountry
Country__Canada
  succ CalendarCountry
Country__Canada = CalendarCountry
Country__China
  succ CalendarCountry
Country__China = CalendarCountry
Country__CzechRepublic
  succ CalendarCountry
Country__CzechRepublic = CalendarCountry
Country__Denmark
  succ CalendarCountry
Country__Denmark = CalendarCountry
Country__Finland
  succ Country__Finland = Country__France
  succ Country__France = Country__Germany
  succ CalendarCountry
Country__Germany = CalendarCountry
Country__HongKong
  succ Country__HongKong = Country__Hungary
  succ CalendarCountry
Country__Hungary = CalendarCountry
Country__Iceland
  succ CalendarCountry
Country__Iceland = CalendarCountry
Country__India
  succ CalendarCountry
Country__India = CalendarCountry
Country__Indonesia
  succ CalendarCountry
Country__Indonesia = CalendarCountry
Country__Israel
  succ CalendarCountry
Country__Israel = CalendarCountry
Country__Italy
  succ CalendarCountry
Country__Italy = CalendarCountry
Country__Japan
  succ CalendarCountry
Country__Japan = CalendarCountry
Country__Mexico
  succ CalendarCountry
Country__Mexico = CalendarCountry
Country__NewZealand
  succ CalendarCountry
Country__NewZealand = CalendarCountry
Country__Norway
  succ CalendarCountry
Country__Norway = CalendarCountry
Country__Null
  succ CalendarCountry
Country__Null = CalendarCountry
Country__Poland
  succ CalendarCountry
Country__Poland = CalendarCountry
Country__Romania
  succ CalendarCountry
Country__Romania = CalendarCountry
Country__Russia
  succ Country__Russia = CalendarCountry
Country__SaudiArabia
  succ CalendarCountry
Country__SaudiArabia = CalendarCountry
Country__Singapore
  succ CalendarCountry
Country__Singapore = CalendarCountry
Country__Slovakia
  succ CalendarCountry
Country__Slovakia = CalendarCountry
Country__SouthAfrica
  succ Country__SouthAfrica = CalendarCountry
Country__SouthKorea
  succ Country__SouthKorea = CalendarCountry
Country__Sweden
  succ Country__Sweden = CalendarCountry
Country__Switzerland
  succ Country__Switzerland = CalendarCountry
Country__Taiwan
  succ Country__Taiwan = CalendarCountry
Country__TARGET
  succ Country__TARGET = CalendarCountry
Country__Thailand
  succ Country__Thailand = CalendarCountry
Country__Turkey
  succ Country__Turkey = CalendarCountry
Country__Ukraine
  succ Country__Ukraine = CalendarCountry
Country__UnitedKingdom
  succ Country__UnitedKingdom = CalendarCountry
Country__UnitedStates
  succ CalendarCountry
Country__UnitedStates = CalendarCountry
Country__WeekendsOnly
  succ CalendarCountry
Country__WeekendsOnly = CalendarCountry
Country__Chile
  succ CalendarCountry
Country__Chile = CalendarCountry
Country__Croatia
  succ CalendarCountry
Country__Croatia = CalendarCountry
Country__Malta
  succ CalendarCountry
Country__Malta = CalendarCountry
Country__Montenegro
  succ CalendarCountry
Country__Montenegro = CalendarCountry
Country__NorthMacedonia
  succ CalendarCountry
Country__NorthMacedonia = CalendarCountry
Country__Serbia
  succ CalendarCountry
Country__Serbia = CalendarCountry
Country__Slovenia
  succ CalendarCountry
Country__Slovenia = CalendarCountry
Country__Uzbekistan
  succ CalendarCountry
Country__Uzbekistan = String -> CalendarCountry
forall a. HasCallStack => String -> a
error String
"CalendarCountry.succ: Country__Uzbekistan has no successor"

  pred :: CalendarCountry -> CalendarCountry
pred CalendarCountry
Country__Australia = CalendarCountry
Country__Argentina
  pred CalendarCountry
Country__Austria = CalendarCountry
Country__Australia
  pred CalendarCountry
Country__Botswana = CalendarCountry
Country__Austria
  pred CalendarCountry
Country__Brazil = CalendarCountry
Country__Botswana
  pred CalendarCountry
Country__Canada = CalendarCountry
Country__Brazil
  pred CalendarCountry
Country__China = CalendarCountry
Country__Canada
  pred CalendarCountry
Country__CzechRepublic = CalendarCountry
Country__China
  pred CalendarCountry
Country__Denmark = CalendarCountry
Country__CzechRepublic
  pred CalendarCountry
Country__Finland = CalendarCountry
Country__Denmark
  pred CalendarCountry
Country__France = CalendarCountry
Country__Finland
  pred CalendarCountry
Country__Germany = CalendarCountry
Country__France
  pred CalendarCountry
Country__HongKong = CalendarCountry
Country__Germany
  pred CalendarCountry
Country__Hungary = CalendarCountry
Country__HongKong
  pred CalendarCountry
Country__Iceland = CalendarCountry
Country__Hungary
  pred CalendarCountry
Country__India = CalendarCountry
Country__Iceland
  pred CalendarCountry
Country__Indonesia = CalendarCountry
Country__India
  pred CalendarCountry
Country__Israel = CalendarCountry
Country__Indonesia
  pred CalendarCountry
Country__Italy = CalendarCountry
Country__Israel
  pred CalendarCountry
Country__Japan = CalendarCountry
Country__Italy
  pred CalendarCountry
Country__Mexico = CalendarCountry
Country__Japan
  pred CalendarCountry
Country__NewZealand = CalendarCountry
Country__Mexico
  pred CalendarCountry
Country__Norway = CalendarCountry
Country__NewZealand
  pred CalendarCountry
Country__Null = CalendarCountry
Country__Norway
  pred CalendarCountry
Country__Poland = CalendarCountry
Country__Null
  pred CalendarCountry
Country__Romania = CalendarCountry
Country__Poland
  pred CalendarCountry
Country__Russia = CalendarCountry
Country__Romania
  pred CalendarCountry
Country__SaudiArabia = CalendarCountry
Country__Russia
  pred CalendarCountry
Country__Singapore = CalendarCountry
Country__SaudiArabia
  pred CalendarCountry
Country__Slovakia = CalendarCountry
Country__Singapore
  pred CalendarCountry
Country__SouthAfrica = CalendarCountry
Country__Slovakia
  pred CalendarCountry
Country__SouthKorea = CalendarCountry
Country__SouthAfrica
  pred CalendarCountry
Country__Sweden = CalendarCountry
Country__SouthKorea
  pred CalendarCountry
Country__Switzerland = CalendarCountry
Country__Sweden
  pred CalendarCountry
Country__Taiwan = CalendarCountry
Country__Switzerland
  pred CalendarCountry
Country__TARGET = CalendarCountry
Country__Taiwan
  pred CalendarCountry
Country__Thailand = CalendarCountry
Country__TARGET
  pred CalendarCountry
Country__Turkey = CalendarCountry
Country__Thailand
  pred CalendarCountry
Country__Ukraine = CalendarCountry
Country__Turkey
  pred CalendarCountry
Country__UnitedKingdom = CalendarCountry
Country__Ukraine
  pred CalendarCountry
Country__UnitedStates = CalendarCountry
Country__UnitedKingdom
  pred CalendarCountry
Country__WeekendsOnly = CalendarCountry
Country__UnitedStates
  pred CalendarCountry
Country__Chile = CalendarCountry
Country__WeekendsOnly
  pred CalendarCountry
Country__Croatia = CalendarCountry
Country__Chile
  pred CalendarCountry
Country__Malta = CalendarCountry
Country__Croatia
  pred CalendarCountry
Country__Montenegro = CalendarCountry
Country__Malta
  pred CalendarCountry
Country__NorthMacedonia = CalendarCountry
Country__Montenegro
  pred CalendarCountry
Country__Serbia = CalendarCountry
Country__NorthMacedonia
  pred CalendarCountry
Country__Slovenia = CalendarCountry
Country__Serbia
  pred CalendarCountry
Country__Uzbekistan = CalendarCountry
Country__Slovenia
  pred CalendarCountry
Country__Argentina = String -> CalendarCountry
forall a. HasCallStack => String -> a
error String
"CalendarCountry.pred: Country__Argentina has no predecessor"

  enumFromTo :: CalendarCountry -> CalendarCountry -> [CalendarCountry]
enumFromTo CalendarCountry
from CalendarCountry
to = CalendarCountry -> [CalendarCountry]
forall {t}. Enum t => t -> [t]
go CalendarCountry
from
    where
      end :: Int
end = CalendarCountry -> Int
forall a. Enum a => a -> Int
fromEnum CalendarCountry
to
      go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 Ordering
EQ -> [t
v]
                 Ordering
GT -> []

  enumFrom :: CalendarCountry -> [CalendarCountry]
enumFrom CalendarCountry
from = CalendarCountry -> CalendarCountry -> [CalendarCountry]
forall a. Enum a => a -> a -> [a]
enumFromTo CalendarCountry
from CalendarCountry
Country__Uzbekistan

  fromEnum :: CalendarCountry -> Int
fromEnum CalendarCountry
Country__Argentina = Int
0
  fromEnum CalendarCountry
Country__Australia = Int
1
  fromEnum CalendarCountry
Country__Austria = Int
2
  fromEnum CalendarCountry
Country__Botswana = Int
3
  fromEnum CalendarCountry
Country__Brazil = Int
4
  fromEnum CalendarCountry
Country__Canada = Int
5
  fromEnum CalendarCountry
Country__China = Int
6
  fromEnum CalendarCountry
Country__CzechRepublic = Int
7
  fromEnum CalendarCountry
Country__Denmark = Int
8
  fromEnum CalendarCountry
Country__Finland = Int
9
  fromEnum CalendarCountry
Country__France = Int
10
  fromEnum CalendarCountry
Country__Germany = Int
11
  fromEnum CalendarCountry
Country__HongKong = Int
12
  fromEnum CalendarCountry
Country__Hungary = Int
13
  fromEnum CalendarCountry
Country__Iceland = Int
14
  fromEnum CalendarCountry
Country__India = Int
15
  fromEnum CalendarCountry
Country__Indonesia = Int
16
  fromEnum CalendarCountry
Country__Israel = Int
17
  fromEnum CalendarCountry
Country__Italy = Int
18
  fromEnum CalendarCountry
Country__Japan = Int
19
  fromEnum CalendarCountry
Country__Mexico = Int
20
  fromEnum CalendarCountry
Country__NewZealand = Int
21
  fromEnum CalendarCountry
Country__Norway = Int
22
  fromEnum CalendarCountry
Country__Null = Int
23
  fromEnum CalendarCountry
Country__Poland = Int
24
  fromEnum CalendarCountry
Country__Romania = Int
25
  fromEnum CalendarCountry
Country__Russia = Int
26
  fromEnum CalendarCountry
Country__SaudiArabia = Int
27
  fromEnum CalendarCountry
Country__Singapore = Int
28
  fromEnum CalendarCountry
Country__Slovakia = Int
29
  fromEnum CalendarCountry
Country__SouthAfrica = Int
30
  fromEnum CalendarCountry
Country__SouthKorea = Int
31
  fromEnum CalendarCountry
Country__Sweden = Int
32
  fromEnum CalendarCountry
Country__Switzerland = Int
33
  fromEnum CalendarCountry
Country__Taiwan = Int
34
  fromEnum CalendarCountry
Country__TARGET = Int
35
  fromEnum CalendarCountry
Country__Thailand = Int
36
  fromEnum CalendarCountry
Country__Turkey = Int
37
  fromEnum CalendarCountry
Country__Ukraine = Int
38
  fromEnum CalendarCountry
Country__UnitedKingdom = Int
39
  fromEnum CalendarCountry
Country__UnitedStates = Int
40
  fromEnum CalendarCountry
Country__WeekendsOnly = Int
41
  fromEnum CalendarCountry
Country__Chile = Int
42
  fromEnum CalendarCountry
Country__Croatia = Int
43
  fromEnum CalendarCountry
Country__Malta = Int
44
  fromEnum CalendarCountry
Country__Montenegro = Int
45
  fromEnum CalendarCountry
Country__NorthMacedonia = Int
46
  fromEnum CalendarCountry
Country__Serbia = Int
47
  fromEnum CalendarCountry
Country__Slovenia = Int
48
  fromEnum CalendarCountry
Country__Uzbekistan = Int
49

  toEnum :: Int -> CalendarCountry
toEnum Int
0 = CalendarCountry
Country__Argentina
  toEnum Int
1 = CalendarCountry
Country__Australia
  toEnum Int
2 = CalendarCountry
Country__Austria
  toEnum Int
3 = CalendarCountry
Country__Botswana
  toEnum Int
4 = CalendarCountry
Country__Brazil
  toEnum Int
5 = CalendarCountry
Country__Canada
  toEnum Int
6 = CalendarCountry
Country__China
  toEnum Int
7 = CalendarCountry
Country__CzechRepublic
  toEnum Int
8 = CalendarCountry
Country__Denmark
  toEnum Int
9 = CalendarCountry
Country__Finland
  toEnum Int
10 = CalendarCountry
Country__France
  toEnum Int
11 = CalendarCountry
Country__Germany
  toEnum Int
12 = CalendarCountry
Country__HongKong
  toEnum Int
13 = CalendarCountry
Country__Hungary
  toEnum Int
14 = CalendarCountry
Country__Iceland
  toEnum Int
15 = CalendarCountry
Country__India
  toEnum Int
16 = CalendarCountry
Country__Indonesia
  toEnum Int
17 = CalendarCountry
Country__Israel
  toEnum Int
18 = CalendarCountry
Country__Italy
  toEnum Int
19 = CalendarCountry
Country__Japan
  toEnum Int
20 = CalendarCountry
Country__Mexico
  toEnum Int
21 = CalendarCountry
Country__NewZealand
  toEnum Int
22 = CalendarCountry
Country__Norway
  toEnum Int
23 = CalendarCountry
Country__Null
  toEnum Int
24 = CalendarCountry
Country__Poland
  toEnum Int
25 = CalendarCountry
Country__Romania
  toEnum Int
26 = CalendarCountry
Country__Russia
  toEnum Int
27 = CalendarCountry
Country__SaudiArabia
  toEnum Int
28 = CalendarCountry
Country__Singapore
  toEnum Int
29 = CalendarCountry
Country__Slovakia
  toEnum Int
30 = CalendarCountry
Country__SouthAfrica
  toEnum Int
31 = CalendarCountry
Country__SouthKorea
  toEnum Int
32 = CalendarCountry
Country__Sweden
  toEnum Int
33 = CalendarCountry
Country__Switzerland
  toEnum Int
34 = CalendarCountry
Country__Taiwan
  toEnum Int
35 = CalendarCountry
Country__TARGET
  toEnum Int
36 = CalendarCountry
Country__Thailand
  toEnum Int
37 = CalendarCountry
Country__Turkey
  toEnum Int
38 = CalendarCountry
Country__Ukraine
  toEnum Int
39 = CalendarCountry
Country__UnitedKingdom
  toEnum Int
40 = CalendarCountry
Country__UnitedStates
  toEnum Int
41 = CalendarCountry
Country__WeekendsOnly
  toEnum Int
42 = CalendarCountry
Country__Chile
  toEnum Int
43 = CalendarCountry
Country__Croatia
  toEnum Int
44 = CalendarCountry
Country__Malta
  toEnum Int
45 = CalendarCountry
Country__Montenegro
  toEnum Int
46 = CalendarCountry
Country__NorthMacedonia
  toEnum Int
47 = CalendarCountry
Country__Serbia
  toEnum Int
48 = CalendarCountry
Country__Slovenia
  toEnum Int
49 = CalendarCountry
Country__Uzbekistan
  toEnum Int
unmatched = String -> CalendarCountry
forall a. HasCallStack => String -> a
error (String
"CalendarCountry.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 24 "./QuantLib/Internal/CalendarEnum.chs" #-}

data AustriaMarket = Austria__Settlement
                   | Austria__Exchange
  deriving (Enum,Show,Eq,Read)

{-# LINE 25 "./QuantLib/Internal/CalendarEnum.chs" #-}

data BrazilMarket = Brazil__Settlement
                  | Brazil__Exchange
  deriving (Enum,Show,Eq,Read)

{-# LINE 26 "./QuantLib/Internal/CalendarEnum.chs" #-}

data CanadaMarket = Canada__Settlement
                  | Canada__TSX
  deriving (Enum,Show,Eq,Read)

{-# LINE 27 "./QuantLib/Internal/CalendarEnum.chs" #-}

data ChinaMarket = China__SSE
                 | China__IB
  deriving (Enum,Show,Eq,Read)

{-# LINE 28 "./QuantLib/Internal/CalendarEnum.chs" #-}

data FranceMarket = France__Settlement
                  | France__Exchange
  deriving (Enum,Show,Eq,Read)

{-# LINE 29 "./QuantLib/Internal/CalendarEnum.chs" #-}

data GermanyMarket = Germany__Settlement
                   | Germany__FrankfurtStockExchange
                   | Germany__Xetra
                   | Germany__Eurex
                   | Germany__Euwax
  deriving (Enum,Show,Eq,Read)

{-# LINE 30 "./QuantLib/Internal/CalendarEnum.chs" #-}

data IndonesiaMarket = Indonesia__BEJ
                     | Indonesia__JSX
                     | Indonesia__IDX
  deriving (Enum,Show,Eq,Read)

{-# LINE 31 "./QuantLib/Internal/CalendarEnum.chs" #-}

data IsraelMarket = Israel__Settlement
                  | Israel__TASE
                  | Israel__SHIR
                  | Israel__Telbor
  deriving (Enum,Show,Eq,Read)

{-# LINE 32 "./QuantLib/Internal/CalendarEnum.chs" #-}

data ItalyMarket = Italy__Settlement
                 | Italy__Exchange
  deriving (Enum,Show,Eq,Read)

{-# LINE 33 "./QuantLib/Internal/CalendarEnum.chs" #-}

data RomaniaMarket = Romania__Public
                   | Romania__BVB
  deriving (Enum,Show,Eq,Read)

{-# LINE 34 "./QuantLib/Internal/CalendarEnum.chs" #-}

data RussiaMarket = Russia__Settlement
                  | Russia__MOEX
  deriving (Enum,Show,Eq,Read)

{-# LINE 35 "./QuantLib/Internal/CalendarEnum.chs" #-}

data SouthKoreaMarket = SouthKorea__Settlement
                      | SouthKorea__KRX
  deriving (Enum,Show,Eq,Read)

{-# LINE 36 "./QuantLib/Internal/CalendarEnum.chs" #-}

data UnitedKingdomMarket = UnitedKingdom__Settlement
                         | UnitedKingdom__Exchange
                         | UnitedKingdom__Metals
  deriving (Enum,Show,Eq,Read)

{-# LINE 37 "./QuantLib/Internal/CalendarEnum.chs" #-}

data UnitedStatesMarket = UnitedStates__Settlement
                        | UnitedStates__NYSE
                        | UnitedStates__GovernmentBond
                        | UnitedStates__NERC
                        | UnitedStates__LiborImpact
                        | UnitedStates__FederalReserve
                        | UnitedStates__SOFR
  deriving (Enum,Show,Eq,Read)

{-# LINE 38 "./QuantLib/Internal/CalendarEnum.chs" #-}

data AustraliaMarket = Australia__Settlement
                     | Australia__ASX
  deriving (Enum,Show,Eq,Read)

{-# LINE 39 "./QuantLib/Internal/CalendarEnum.chs" #-}

data NewZealandMarket = NewZealand__Wellington
                      | NewZealand__Auckland
  deriving (Enum,Show,Eq,Read)

{-# LINE 40 "./QuantLib/Internal/CalendarEnum.chs" #-}

data PolandMarket = Poland__Settlement
                  | Poland__WSE
  deriving (Enum,Show,Eq,Read)

{-# LINE 41 "./QuantLib/Internal/CalendarEnum.chs" #-}


data CalendarExtra =
   Extra__Bespoke !String ![Weekday]
  | Extra__Joint2 !Calendar !Calendar !JointCalendarRule
  | Extra__Joint3 !Calendar !Calendar !Calendar !JointCalendarRule
  | Extra__Joint4 !Calendar !Calendar !Calendar !Calendar !JointCalendarRule

$(deriveCrossEnum CrossEnumSpec
    { crossTypeName = "CalendarConstructor"
    , crossMapperFn = "mapCalendar"
    , crossMainEnum = ''CalendarCountry
    , crossSubSuffix = "Market"
    , crossExtraType = ''CalendarExtra
    })

deriving instance Show CalendarConstructor
deriving instance Eq CalendarConstructor

$(deriveReadPlain "readCalendarConstructorPlain" ''CalendarConstructor)

data DayCounterType = DayCounter__Actual360
                    | DayCounter__Actual364
                    | DayCounter__Actual365Fixed
                    | DayCounter__ActualActual
                    | DayCounter__One
                    | DayCounter__Simple
                    | DayCounter__Thirty360
                    | DayCounter__Thirty365
                    | DayCounter__Actual36525
                    | DayCounter__Actual366
  deriving (Show,Eq,Read)
instance Enum DayCounterType where
  succ DayCounter__Actual360 = DayCounter__Actual364
  succ DayCounter__Actual364 = DayCounter__Actual365Fixed
  succ DayCounter__Actual365Fixed = DayCounter__ActualActual
  succ DayCounter__ActualActual = DayCounter__One
  succ DayCounter__One = DayCounter__Simple
  succ DayCounter__Simple = DayCounter__Thirty360
  succ DayCounter__Thirty360 = DayCounter__Thirty365
  succ DayCounter__Thirty365 = DayCounter__Actual36525
  succ DayCounter__Actual36525 = DayCounter__Actual366
  succ DayCounter__Actual366 = error "DayCounterType.succ: DayCounter__Actual366 has no successor"

  pred DayCounter__Actual364 = DayCounter__Actual360
  pred DayCounter__Actual365Fixed = DayCounter__Actual364
  pred DayCounter__ActualActual = DayCounter__Actual365Fixed
  pred DayCounter__One = DayCounter__ActualActual
  pred DayCounter__Simple = DayCounter__One
  pred DayCounter__Thirty360 = DayCounter__Simple
  pred DayCounter__Thirty365 = DayCounter__Thirty360
  pred DayCounter__Actual36525 = DayCounter__Thirty365
  pred DayCounter__Actual366 = DayCounter__Actual36525
  pred DayCounter__Actual360 = error "DayCounterType.pred: DayCounter__Actual360 has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from DayCounter__Actual366

  fromEnum DayCounter__Actual360 = 0
  fromEnum DayCounter__Actual364 = 1
  fromEnum DayCounter__Actual365Fixed = 2
  fromEnum DayCounter__ActualActual = 3
  fromEnum DayCounter__One = 4
  fromEnum DayCounter__Simple = 5
  fromEnum DayCounter__Thirty360 = 6
  fromEnum DayCounter__Thirty365 = 7
  fromEnum DayCounter__Actual36525 = 8
  fromEnum DayCounter__Actual366 = 9

  toEnum 0 = DayCounter__Actual360
  toEnum 1 = DayCounter__Actual364
  toEnum 2 = DayCounter__Actual365Fixed
  toEnum 3 = DayCounter__ActualActual
  toEnum 4 = DayCounter__One
  toEnum 5 = DayCounter__Simple
  toEnum 6 = DayCounter__Thirty360
  toEnum 7 = DayCounter__Thirty365
  toEnum 8 = DayCounter__Actual36525
  toEnum 9 = DayCounter__Actual366
  toEnum unmatched = error ("DayCounterType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 62 "./QuantLib/Internal/CalendarEnum.chs" #-}

data ActualActualConvention = ActualActual__ISMA
                            | ActualActual__Bond
                            | ActualActual__ISDA
                            | ActualActual__Historical
                            | ActualActual__Actual365
                            | ActualActual__AFB
                            | ActualActual__Euro
  deriving (Enum,Show,Eq,Read)

{-# LINE 63 "./QuantLib/Internal/CalendarEnum.chs" #-}

data Thirty360Convention = Thirty360__USA
                         | Thirty360__BondBasis
                         | Thirty360__European
                         | Thirty360__EurobondBasis
                         | Thirty360__Italian
                         | Thirty360__German
                         | Thirty360__ISMA
                         | Thirty360__ISDA
                         | Thirty360__NASD
  deriving (Enum,Show,Eq,Read)

{-# LINE 64 "./QuantLib/Internal/CalendarEnum.chs" #-}

data Actual365FixedConvention = Actual365Fixed__Standard
                              | Actual365Fixed__Canadian
                              | Actual365Fixed__NoLeap
  deriving (Enum,Show,Eq,Read)

{-# LINE 65 "./QuantLib/Internal/CalendarEnum.chs" #-}

-- these three don't have a real named Convention enum upstream, just a plain
-- includeLastDay bool -- this marker tells deriveCrossEnum to give them a single
-- constructor carrying a runtime Bool instead of cross-producting named values
type Actual360Convention = Bool
type Actual36525Convention = Bool
type Actual366Convention = Bool

data DayCounterExtra = Extra__Business252 !Calendar
  | Extra__ActualActualBond' !Schedule
  | Extra__ActualActualISMA' !Schedule

$(deriveCrossEnum CrossEnumSpec
    { crossTypeName = "DayCounterConstructor"
    , crossMapperFn = "mapDayCounter"
    , crossMainEnum = ''DayCounterType
    , crossSubSuffix = "Convention"
    , crossExtraType = ''DayCounterExtra
    })

deriving instance Show DayCounterConstructor
deriving instance Eq DayCounterConstructor

$(deriveReadPlain "readDayCounterConstructorPlain" ''DayCounterConstructor)

-- vim: set ff=unix ts=8 sts=2 sw=2 et: