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


{-# LINE 1 "src/Foreign/Libcdio/Types/Enums.chs" #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# OPTIONS_HADDOCK not-home #-}



{-|
Description:    c2hs-generated types for re-export by more relevant modules.

Copyright:      (c) 2018-2021 Sam May
License:        GPL-3.0-or-later
Maintainer:     ag@eitilt.life

Stability:      stable
Portability:    non-portable (requires libcdio)

Many of the enums in the C library are large things with explicit numeric
representation, and maintaining them in pure Haskell would be a nightmare.  On
the other hand, keeping them in their natural modules means those can never be
analyzed for coverage.  Splitting the former out here allows the best of both
worlds — losing typeclass coverage reports on the enums is a small price.  Just
note that since this isn't exposed, it /can not/ be used directly by any other
c2hs-generated modules.
-}
module Foreign.Libcdio.Types.Enums
    ( -- * "Foreign.Libcdio.CdText"
      CField
    , Field ( .. )
    , CGenre
    , Genre ( .. )
    , CLanguage
    , Language ( .. )
      -- * "Foreign.Libcdio.CdTypes"
    , Filesystem_ ( .. )
    , FilesystemClass ( .. )
      -- * "Foreign.Libcdio.Device"
    , DriveCapabilityMisc ( .. )
    , DriveCapabilityRead ( .. )
    , DriveCapabilityWrite ( .. )
    , CDriverId
    , DriverId ( .. )
    , CDriverReturnCode
    , DriverReturnCode ( .. )
      -- * "Foreign.Libcdio.Disc"
    , CDiscMode
    , DiscMode ( .. )
      -- * "Foreign.Libcdio.Logging"
    , CLogLevel
    , LogLevel ( .. )
      -- * "Foreign.Libcdio.Read"
    , ReadMode ( .. )
    , Whence ( .. )
      -- * "Foreign.Libcdio.Sector"
    , SubchannelData ( .. )
    , Flag ( .. )
      -- * "Foreign.Libcdio.Track"
    , CTrackFormat
    , TrackFormat ( .. )
    , TrackFlagStatus ( .. )
    ) where
import qualified Foreign.C.Types as C2HSImp




import Data.Ix ( Ix )





-- | The underlying type of the C @cdtext_field_t@, i.e. 'Field'.
type CField = (C2HSImp.CInt)
{-# LINE 70 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Descriptions of the content contained in an associated CD Text field.
data Field = Title
           | Performer
           | Songwriter
           | Composer
           | Message
           | Arranger
           | Isrc
           | UpcEan
           | GenreName
           | DiscId
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum Field where
  succ :: Field -> Field
succ Field
Title = Field
Performer
  succ Field
Performer = Field
Songwriter
  succ Field
Songwriter = Field
Composer
  succ Field
Composer = Field
Message
  succ Field
Message = Field
Arranger
  succ Field
Arranger = Field
Isrc
  succ Field
Isrc = Field
UpcEan
  succ Field
UpcEan = Field
GenreName
  succ Field
GenreName = Field
DiscId
  succ Field
DiscId = String -> Field
forall a. HasCallStack => String -> a
error String
"Field.succ: DiscId has no successor"

  pred :: Field -> Field
pred Field
Performer = Field
Title
  pred Field
Songwriter = Field
Performer
  pred Field
Composer = Field
Songwriter
  pred Field
Message = Field
Composer
  pred Field
Arranger = Field
Message
  pred Field
Isrc = Field
Arranger
  pred Field
UpcEan = Field
Isrc
  pred GenreName = UpcEan
  pred Field
DiscId = Field
GenreName
  pred Field
Title = String -> Field
forall a. HasCallStack => String -> a
error String
"Field.pred: Title has no predecessor"

  enumFromTo :: Field -> Field -> [Field]
enumFromTo Field
from Field
to = Field -> [Field]
forall t. Enum t => t -> [t]
go Field
from
    where
      end :: Int
end = Field -> Int
forall a. Enum a => a -> Int
fromEnum Field
to
      go :: t -> [t]
go t
v = case 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)
                 EQ -> [v]
                 GT -> []

  enumFrom :: Field -> [Field]
enumFrom Field
from = enumFromTo from DiscId

  fromEnum :: Field -> Int
fromEnum Field
Title = Int
0
  fromEnum Field
Performer = Int
1
  fromEnum Field
Songwriter = Int
2
  fromEnum Field
Composer = Int
3
  fromEnum Field
Message = Int
4
  fromEnum Field
Arranger = Int
5
  fromEnum Field
Isrc = Int
6
  fromEnum Field
UpcEan = Int
7
  fromEnum Field
GenreName = Int
8
  fromEnum Field
DiscId = Int
9

  toEnum :: Int -> Field
toEnum Int
0 = Field
Title
  toEnum Int
1 = Field
Performer
  toEnum Int
2 = Field
Songwriter
  toEnum Int
3 = Field
Composer
  toEnum Int
4 = Field
Message
  toEnum Int
5 = Field
Arranger
  toEnum Int
6 = Field
Isrc
  toEnum Int
7 = Field
UpcEan
  toEnum Int
8 = Field
GenreName
  toEnum Int
9 = Field
DiscId
  toEnum Int
unmatched = String -> Field
forall a. HasCallStack => String -> a
error (String
"Field.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 80 "src/Foreign/Libcdio/Types/Enums.chs" #-}



-- | The underlying type of the C @cdtext_genre_t@, i.e. 'Genre'.
type CGenre = (C2HSImp.CInt)
{-# LINE 84 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Genres recognized in the CD Text standard.
data Genre = Undefined
           | AdultContemporary
           | AltRock
           | Childrens
           | Classic
           | ChristianContemporary
           | Country
           | Dance
           | EasyListening
           | Erotic
           | Folk
           | Gospel
           | HipHop
           | Jazz
           | LatinMusic
           | Musical
           | NewAge
           | Opera
           | Operetta
           | Pop
           | Rap
           | Reggae
           | Rock
           | RhythmAndBlues
           | SoundEffects
           | Soundtrack
           | SpokenWord
           | WorldMusic
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum Genre where
  succ Undefined = AdultContemporary
  succ AdultContemporary = AltRock
  succ AltRock = Childrens
  succ Childrens = Classic
  succ Classic = ChristianContemporary
  succ ChristianContemporary = Country
  succ Country = Dance
  succ Dance = EasyListening
  succ EasyListening = Erotic
  succ Erotic = Folk
  succ Folk = Gospel
  succ Gospel = HipHop
  succ HipHop = Jazz
  succ Jazz = LatinMusic
  succ LatinMusic = Musical
  succ Musical = NewAge
  succ NewAge = Opera
  succ Opera = Operetta
  succ Operetta = Pop
  succ Pop = Rap
  succ Rap = Reggae
  succ Reggae = Rock
  succ Rock = RhythmAndBlues
  succ RhythmAndBlues = SoundEffects
  succ SoundEffects = Soundtrack
  succ Soundtrack = SpokenWord
  succ SpokenWord = WorldMusic
  succ WorldMusic = error "Genre.succ: WorldMusic has no successor"

  pred :: Genre -> Genre
pred Genre
AdultContemporary = Genre
Undefined
  pred Genre
AltRock = Genre
AdultContemporary
  pred Genre
Childrens = Genre
AltRock
  pred Genre
Classic = Genre
Childrens
  pred Genre
ChristianContemporary = Genre
Classic
  pred Genre
Country = Genre
ChristianContemporary
  pred Genre
Dance = Genre
Country
  pred Genre
EasyListening = Genre
Dance
  pred Genre
Erotic = Genre
EasyListening
  pred Genre
Folk = Genre
Erotic
  succ :: Filesystem_ -> Filesystem_
pred Genre
Gospel = Genre
Folk
  pred Genre
HipHop = Genre
Gospel
  pred Genre
Jazz = Genre
HipHop
  pred Genre
LatinMusic = Genre
Jazz
  pred Genre
Musical = Genre
LatinMusic
  pred Genre
NewAge = Genre
Musical
  pred Genre
Opera = Genre
NewAge
  pred Filesystem_
Genre
Operetta = Genre
Opera
  pred Genre
Pop = Genre
Operetta
  pred Genre
Rap = Genre
Pop
  pred Filesystem_
Genre
Reggae = Genre
Rap
  pred Genre
Rock = Genre
Reggae
  pred Genre
RhythmAndBlues = Genre
Rock
  pred Genre
SoundEffects = Genre
RhythmAndBlues
  pred Genre
Soundtrack = Genre
SoundEffects
  pred Genre
SpokenWord = Genre
Soundtrack
  pred Genre
WorldMusic = Genre
SpokenWord
  pred Genre
Undefined = String -> Genre
forall a. HasCallStack => String -> a
error String
"Genre.pred: Undefined 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 WorldMusic

  fromEnum Undefined = 1
  fromEnum AdultContemporary = 2
  fromEnum AltRock = 3
  fromEnum Childrens = 4
  fromEnum Classic = 5
  fromEnum ChristianContemporary = 6
  fromEnum Country = 7
  fromEnum Dance = 8
  fromEnum EasyListening = 9
  enumFrom :: Filesystem_ -> [Filesystem_]
fromEnum Erotic = 10
  fromEnum Folk = 11
  fromEnum Gospel = 12
  fromEnum HipHop = 13
  fromEnum Jazz = 14
  enumFrom :: FilesystemClass -> [FilesystemClass]
fromEnum LatinMusic = 15
  fromEnum Musical = 16
  fromEnum NewAge = 17
  fromEnum Opera = 18
  fromEnum Operetta = 19
  fromEnum Pop = 20
  fromEnum Rap = 21
  fromEnum Reggae = 22
  fromEnum Rock = 23
  enumFrom :: DriveCapabilityMisc -> [DriveCapabilityMisc]
fromEnum RhythmAndBlues = 24
  fromEnum SoundEffects = 25
  fromEnum :: DriveCapabilityMisc -> Int
fromEnum Soundtrack = 26
  fromEnum SpokenWord = 27
  fromEnum WorldMusic = 28

  toEnum 1 = Undefined
  toEnum 2 = AdultContemporary
  toEnum 3 = AltRock
  toEnum 4 = Childrens
  toEnum 5 = Classic
  toEnum 6 = ChristianContemporary
  toEnum 7 = Country
  toEnum 8 = Dance
  toEnum 9 = EasyListening
  toEnum 10 = Erotic
  toEnum 11 = Folk
  toEnum 12 = Gospel
  toEnum 13 = HipHop
  toEnum 14 = Jazz
  toEnum 15 = LatinMusic
  toEnum 16 = Musical
  toEnum 17 = NewAge
  toEnum 18 = Opera
  toEnum 19 = Operetta
  toEnum 20 = Pop
  toEnum 21 = Rap
  toEnum 22 = Reggae
  toEnum 23 = Rock
  toEnum 24 = RhythmAndBlues
  toEnum 25 = SoundEffects
  toEnum 26 = Soundtrack
  toEnum 27 = SpokenWord
  toEnum 28 = WorldMusic
  toEnum unmatched = error ("Genre.toEnum: Cannot match " ++ show unmatched)

{-# LINE 99 "src/Foreign/Libcdio/Types/Enums.chs" #-}



-- | The underlying type of the C @cdtext_lang_t@, i.e. 'Language'.
type CLanguage = (C2HSImp.CInt)
{-# LINE 103 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Written languages recognized in the CD Text standard.
data Language = UnknownLanguage
              | Albanian
              | Breton
              | Catalan
              | Croatian
              | Welsh
              | Czech
              | Danish
              | German
              | English
              | Spanish
              | Esperanto
              | Estonian
              | Basque
              | Faroese
              | French
              | Frisian
              | Irish
              | Gaelic
              | Galician
              | Icelandic
              | Italian
              | Lappish
              | Latin
              | Latvian
              | Luxembourgian
              | Lithuanian
              | Hungarian
              | Maltese
              | Dutch
              | Norwegian
              | Occitan
              | Polish
              | Portuguese
              | Romanian
              | Romansh
              | Serbian
              | Slovak
              | Slovenian
              | Finnish
              | Swedish
              | Turkish
              | Flemish
              | Wallon
              | Zulu
              | Vietnamese
              | Uzbek
              | Urdu
              | Ukrainian
              | Thai
              | Telugu
              | Tatar
              | Tamil
              | Tadzhik
              | Swahili
              | SrananTongo
              | Somali
              | Sinhalese
              | Shona
              | SerboCroatian
              | Ruthenian
              | Russian
              | Quechua
              | Pushtu
              | Punjabi
              | Persian
              | Papamiento
              | Oriya
              | Nepali
              | Ndebele
              | Marathi
              | Moldavian
              | Malaysian
              | Malagasay
              | Macedonian
              | Laotian
              | Korean
              | Khmer
              | Kazakh
              | Kannada
              | Japanese
              | Indonesian
              | Hindi
              | Hebrew
              | Hausa
              | Gurani
              | Gujurati
              | Greek
              | Georgian
              | Fulani
              | Dari
              | Churash
              | Chinese
              | Burmese
              | Bulgarian
              | Bengali
              | Bielorussian
              | Bambora
              | Azerbaijani
              | Assamese
              | Armenian
              | Arabic
              | Amharic
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum Language where
  succ UnknownLanguage = Albanian
  succ Albanian = Breton
  succ Breton = Catalan
  succ Catalan = Croatian
  succ Croatian = Welsh
  succ Welsh = Czech
  succ Czech = Danish
  succ Danish = German
  succ German = English
  succ English = Spanish
  succ Spanish = Esperanto
  succ Esperanto = Estonian
  succ Estonian = Basque
  succ Basque = Faroese
  succ Faroese = French
  succ French = Frisian
  succ Frisian = Irish
  succ Irish = Gaelic
  succ Gaelic = Galician
  succ Galician = Icelandic
  succ Icelandic = Italian
  succ Italian = Lappish
  succ Lappish = Latin
  succ Latin = Latvian
  succ Latvian = Luxembourgian
  succ Luxembourgian = Lithuanian
  succ Lithuanian = Hungarian
  succ Hungarian = Maltese
  succ Maltese = Dutch
  succ Dutch = Norwegian
  succ Norwegian = Occitan
  succ Occitan = Polish
  succ Polish = Portuguese
  succ Portuguese = Romanian
  succ Language
Romanian = Language
Romansh
  succ Language
Romansh = Language
Serbian
  succ Language
Serbian = Language
Slovak
  succ Language
Slovak = Language
Slovenian
  succ Language
Slovenian = Language
Finnish
  succ Language
Finnish = Language
Swedish
  succ Language
Swedish = Language
Turkish
  succ Language
Turkish = Language
Flemish
  succ Language
Flemish = Language
Wallon
  succ Language
Wallon = Language
Zulu
  succ Language
Zulu = Language
Vietnamese
  succ Language
Vietnamese = Language
Uzbek
  succ Language
Uzbek = Language
Urdu
  succ Language
Urdu = Language
Ukrainian
  succ Language
Ukrainian = Language
Thai
  succ Language
Thai = Language
Telugu
  succ Language
Telugu = Language
Tatar
  succ Language
Tatar = Language
Tamil
  succ Language
Tamil = Language
Tadzhik
  succ Language
Tadzhik = Language
Swahili
  succ Language
Swahili = Language
SrananTongo
  succ Language
SrananTongo = Language
Somali
  succ Language
Somali = Language
Sinhalese
  succ Language
Sinhalese = Language
Shona
  pred :: DriverId -> DriverId
succ Language
Shona = Language
SerboCroatian
  succ DriverId
Language
SerboCroatian = DriverId
Language
Ruthenian
  succ Language
Ruthenian = Language
Russian
  succ Language
Russian = Language
Quechua
  succ Language
Quechua = Language
Pushtu
  succ Language
Pushtu = Language
Punjabi
  succ Language
Punjabi = Language
Persian
  succ Language
Persian = Language
Papamiento
  succ Language
Papamiento = Language
Oriya
  succ Language
Oriya = Language
Nepali
  succ Language
Nepali = Language
Ndebele
  succ Language
Ndebele = Language
Marathi
  succ Language
Marathi = Language
Moldavian
  succ Language
Moldavian = Language
Malaysian
  succ Language
Malaysian = Language
Malagasay
  succ Language
Malagasay = Language
Macedonian
  succ Language
Macedonian = Language
Laotian
  succ Language
Laotian = Language
Korean
  succ Language
Korean = Language
Khmer
  succ Language
Khmer = Language
Kazakh
  succ Language
Kazakh = Language
Kannada
  succ Language
Kannada = Language
Japanese
  succ Language
Japanese = Language
Indonesian
  succ Language
Indonesian = Language
Hindi
  succ Language
Hindi = Language
Hebrew
  succ Language
Hebrew = Language
Hausa
  succ Language
Hausa = Language
Gurani
  succ Language
Gurani = Language
Gujurati
  succ Language
Gujurati = Language
Greek
  succ Language
Greek = Language
Georgian
  succ Language
Georgian = Language
Fulani
  succ Language
Fulani = Language
Dari
  succ Dari = Churash
  succ Language
Churash = Language
Chinese
  succ Language
Chinese = Language
Burmese
  succ Language
Burmese = Language
Bulgarian
  succ Language
Bulgarian = Language
Bengali
  succ Language
Bengali = Language
Bielorussian
  succ Bielorussian = Bambora
  succ Language
Bambora = Language
Azerbaijani
  succ Azerbaijani = Assamese
  succ Assamese = Armenian
  succ Armenian = Arabic
  succ Arabic = Amharic
  succ Amharic = error "Language.succ: Amharic has no successor"

  pred Albanian = UnknownLanguage
  pred Breton = DriverReturnCode
Albanian
  pred Catalan = Breton
  pred Croatian = Catalan
  pred Welsh = Croatian
  pred Czech = Welsh
  pred Danish = Czech
  pred German = Danish
  pred English = German
  pred Spanish = English
  pred Esperanto = Spanish
  pred Estonian = Esperanto
  pred Basque = Estonian
  pred Faroese = Basque
  pred French = Faroese
  pred Frisian = French
  pred Irish = Frisian
  pred Gaelic = Irish
  pred Galician = Gaelic
  pred Icelandic = Galician
  succ :: LogLevel -> LogLevel
pred Italian = Icelandic
  pred LogLevel
Lappish = LogLevel
Italian
  pred Latin = Lappish
  pred Latvian = Latin
  pred Luxembourgian = Latvian
  pred Lithuanian = Luxembourgian
  pred :: LogLevel -> LogLevel
pred Hungarian = Lithuanian
  pred LogLevel
Maltese = Hungarian
  pred Dutch = Maltese
  pred LogLevel
Norwegian = Dutch
  pred Occitan = Norwegian
  pred Polish = Occitan
  pred Portuguese = Polish
  pred Romanian = Portuguese
  pred Romansh = Romanian
  pred Serbian = Romansh
  pred Slovak = Serbian
  pred Slovenian = Slovak
  pred Finnish = Slovenian
  pred Swedish = Finnish
  pred Turkish = Swedish
  pred Flemish = Turkish
  pred Wallon = Flemish
  pred Zulu = Wallon
  pred Vietnamese = Zulu
  pred Uzbek = Vietnamese
  pred Urdu = Uzbek
  pred Ukrainian = Urdu
  pred Thai = Ukrainian
  pred :: Whence -> Whence
pred Telugu = Thai
  pred Tatar = Telugu
  pred Tamil = Tatar
  pred Tadzhik = Tamil
  pred Language
Swahili = Language
Tadzhik
  pred Language
SrananTongo = Language
Swahili
  pred Language
Somali = Language
SrananTongo
  pred Language
Sinhalese = Language
Somali
  pred Language
Shona = Language
Sinhalese
  pred Language
SerboCroatian = Language
Shona
  pred Ruthenian = SerboCroatian
  pred Language
Russian = Language
Ruthenian
  pred Language
Quechua = Language
Russian
  pred Language
Pushtu = Language
Quechua
  pred :: SubchannelData -> SubchannelData
pred Language
Punjabi = Language
Pushtu
  pred Language
Persian = Language
Punjabi
  pred Papamiento = Persian
  pred Language
Oriya = Language
Papamiento
  pred Language
Nepali = Language
Oriya
  pred Language
Ndebele = Language
Nepali
  pred Language
Marathi = Language
Ndebele
  pred Language
Moldavian = Language
Marathi
  pred Flag
Language
Malaysian = Language
Moldavian
  pred Language
Malagasay = Language
Malaysian
  pred Language
Macedonian = Language
Malagasay
  pred Laotian = Macedonian
  pred :: Flag -> Flag
pred Language
Korean = Language
Laotian
  pred Language
Khmer = Language
Korean
  pred Language
Kazakh = Language
Khmer
  pred Language
Kannada = Language
Kazakh
  pred Language
Japanese = Language
Kannada
  pred Language
Indonesian = Language
Japanese
  pred Language
Hindi = Language
Indonesian
  pred Language
Hebrew = Language
Hindi
  pred Language
Hausa = Language
Hebrew
  pred Language
Gurani = Language
Hausa
  pred Language
Gujurati = Language
Gurani
  pred Language
Greek = Language
Gujurati
  pred Language
Georgian = Language
Greek
  pred Language
Fulani = Language
Georgian
  pred Language
Dari = Language
Fulani
  pred Language
Churash = Language
Dari
  pred Language
Chinese = Language
Churash
  pred Language
Burmese = Language
Chinese
  pred Language
Bulgarian = Language
Burmese
  pred Language
Bengali = Language
Bulgarian
  pred Language
Bielorussian = Language
Bengali
  pred Language
Bambora = Language
Bielorussian
  pred Azerbaijani = Language
Bambora
  pred Language
Assamese = Language
Azerbaijani
  pred Language
Armenian = Language
Assamese
  pred Language
Arabic = Language
Armenian
  pred Language
Amharic = Language
Arabic
  pred UnknownLanguage = error "Language.pred: UnknownLanguage has no predecessor"

  enumFromTo :: Language -> Language -> [Language]
enumFromTo Language
from Language
to = Language -> [Language]
forall t. Enum t => t -> [t]
go Language
from
    where
      end :: Int
end = Language -> Int
forall a. Enum a => a -> Int
fromEnum Language
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 :: Language -> [Language]
enumFrom Language
from = Language -> Language -> [Language]
forall a. Enum a => a -> a -> [a]
enumFromTo Language
from Language
Amharic

  fromEnum :: Language -> Int
fromEnum Language
UnknownLanguage = Int
0
  fromEnum Language
Albanian = Int
1
  fromEnum Language
Breton = Int
2
  fromEnum Language
Catalan = Int
3
  fromEnum Language
Croatian = Int
4
  fromEnum Language
Welsh = Int
5
  fromEnum Language
Czech = Int
6
  fromEnum Language
Danish = Int
7
  fromEnum Language
German = Int
8
  fromEnum Language
English = Int
9
  fromEnum Language
Spanish = Int
10
  fromEnum Language
Esperanto = Int
11
  fromEnum Language
Estonian = Int
12
  fromEnum Language
Basque = Int
13
  fromEnum Language
Faroese = Int
14
  fromEnum Language
French = Int
15
  fromEnum Language
Frisian = Int
16
  fromEnum Language
Irish = Int
17
  fromEnum Language
Gaelic = Int
18
  fromEnum Language
Galician = Int
19
  fromEnum Language
Icelandic = Int
20
  fromEnum Language
Italian = Int
21
  fromEnum Language
Lappish = Int
22
  fromEnum Language
Latin = Int
23
  fromEnum Language
Latvian = Int
24
  fromEnum Language
Luxembourgian = Int
25
  fromEnum Language
Lithuanian = Int
26
  fromEnum Language
Hungarian = Int
27
  fromEnum Language
Maltese = Int
28
  fromEnum Language
Dutch = Int
29
  fromEnum Language
Norwegian = Int
30
  fromEnum Language
Occitan = Int
31
  fromEnum Language
Polish = Int
32
  fromEnum Language
Portuguese = Int
33
  fromEnum Language
Romanian = Int
34
  fromEnum Language
Romansh = Int
35
  fromEnum Language
Serbian = Int
36
  fromEnum Language
Slovak = Int
37
  fromEnum Language
Slovenian = Int
38
  fromEnum Language
Finnish = Int
39
  fromEnum Language
Swedish = Int
40
  fromEnum Language
Turkish = Int
41
  fromEnum Language
Flemish = Int
42
  fromEnum Language
Wallon = Int
43
  fromEnum Language
Zulu = Int
69
  fromEnum Language
Vietnamese = Int
70
  fromEnum Language
Uzbek = Int
71
  fromEnum Language
Urdu = Int
72
  fromEnum Language
Ukrainian = Int
73
  fromEnum Language
Thai = Int
74
  fromEnum Language
Telugu = Int
75
  fromEnum Language
Tatar = Int
76
  fromEnum Language
Tamil = Int
77
  fromEnum Language
Tadzhik = Int
78
  fromEnum Language
Swahili = Int
79
  fromEnum Language
SrananTongo = Int
80
  fromEnum Language
Somali = Int
81
  fromEnum Language
Sinhalese = Int
82
  fromEnum Language
Shona = Int
83
  fromEnum Language
SerboCroatian = Int
84
  fromEnum Language
Ruthenian = Int
85
  fromEnum Language
Russian = Int
86
  fromEnum Language
Quechua = Int
87
  fromEnum Language
Pushtu = Int
88
  fromEnum Language
Punjabi = Int
89
  fromEnum Language
Persian = Int
90
  fromEnum Language
Papamiento = Int
91
  fromEnum Language
Oriya = Int
92
  fromEnum Language
Nepali = Int
93
  fromEnum Language
Ndebele = Int
94
  fromEnum Language
Marathi = Int
95
  fromEnum Language
Moldavian = Int
96
  fromEnum Language
Malaysian = Int
97
  fromEnum Language
Malagasay = Int
98
  fromEnum Language
Macedonian = Int
99
  fromEnum Language
Laotian = Int
100
  fromEnum Language
Korean = Int
101
  fromEnum Language
Khmer = Int
102
  fromEnum Language
Kazakh = Int
103
  fromEnum Language
Kannada = Int
104
  fromEnum Language
Japanese = Int
105
  fromEnum Language
Indonesian = Int
106
  fromEnum Language
Hindi = Int
107
  fromEnum Language
Hebrew = Int
108
  fromEnum Language
Hausa = Int
109
  fromEnum Language
Gurani = Int
110
  fromEnum Language
Gujurati = Int
111
  fromEnum Language
Greek = Int
112
  fromEnum Language
Georgian = Int
113
  fromEnum Language
Fulani = Int
114
  fromEnum Language
Dari = Int
115
  fromEnum Language
Churash = Int
116
  fromEnum Language
Chinese = Int
117
  fromEnum Language
Burmese = Int
118
  fromEnum Language
Bulgarian = Int
119
  fromEnum Language
Bengali = Int
120
  fromEnum Language
Bielorussian = Int
121
  fromEnum Language
Bambora = Int
122
  fromEnum Language
Azerbaijani = Int
123
  fromEnum Language
Assamese = Int
124
  fromEnum Language
Armenian = Int
125
  fromEnum Language
Arabic = Int
126
  fromEnum Language
Amharic = Int
127

  toEnum :: Int -> Language
toEnum Int
0 = Language
UnknownLanguage
  toEnum Int
1 = Language
Albanian
  toEnum Int
2 = Language
Breton
  toEnum Int
3 = Language
Catalan
  toEnum Int
4 = Language
Croatian
  toEnum Int
5 = Language
Welsh
  toEnum Int
6 = Language
Czech
  toEnum Int
7 = Language
Danish
  toEnum Int
8 = Language
German
  toEnum Int
9 = Language
English
  toEnum Int
10 = Language
Spanish
  toEnum Int
11 = Language
Esperanto
  toEnum Int
12 = Language
Estonian
  toEnum Int
13 = Language
Basque
  toEnum Int
14 = Language
Faroese
  toEnum Int
15 = Language
French
  toEnum Int
16 = Language
Frisian
  toEnum Int
17 = Language
Irish
  toEnum Int
18 = Language
Gaelic
  toEnum Int
19 = Language
Galician
  toEnum Int
20 = Language
Icelandic
  toEnum Int
21 = Language
Italian
  toEnum Int
22 = Language
Lappish
  toEnum Int
23 = Language
Latin
  toEnum Int
24 = Language
Latvian
  toEnum Int
25 = Language
Luxembourgian
  toEnum Int
26 = Language
Lithuanian
  toEnum Int
27 = Language
Hungarian
  toEnum Int
28 = Language
Maltese
  toEnum Int
29 = Language
Dutch
  toEnum Int
30 = Language
Norwegian
  toEnum Int
31 = Language
Occitan
  toEnum Int
32 = Language
Polish
  toEnum Int
33 = Language
Portuguese
  toEnum Int
34 = Language
Romanian
  toEnum Int
35 = Language
Romansh
  toEnum Int
36 = Language
Serbian
  toEnum Int
37 = Language
Slovak
  toEnum Int
38 = Language
Slovenian
  toEnum Int
39 = Language
Finnish
  toEnum Int
40 = Language
Swedish
  toEnum Int
41 = Language
Turkish
  toEnum Int
42 = Language
Flemish
  toEnum Int
43 = Language
Wallon
  toEnum Int
69 = Language
Zulu
  toEnum Int
70 = Language
Vietnamese
  toEnum Int
71 = Language
Uzbek
  toEnum Int
72 = Language
Urdu
  toEnum Int
73 = Language
Ukrainian
  toEnum Int
74 = Language
Thai
  toEnum Int
75 = Language
Telugu
  toEnum Int
76 = Language
Tatar
  toEnum Int
77 = Language
Tamil
  toEnum Int
78 = Language
Tadzhik
  toEnum Int
79 = Language
Swahili
  toEnum Int
80 = Language
SrananTongo
  toEnum Int
81 = Language
Somali
  toEnum Int
82 = Language
Sinhalese
  toEnum Int
83 = Language
Shona
  toEnum Int
84 = Language
SerboCroatian
  toEnum Int
85 = Language
Ruthenian
  toEnum Int
86 = Language
Russian
  toEnum Int
87 = Language
Quechua
  toEnum Int
88 = Language
Pushtu
  toEnum Int
89 = Language
Punjabi
  toEnum Int
90 = Language
Persian
  toEnum Int
91 = Language
Papamiento
  toEnum Int
92 = Language
Oriya
  toEnum Int
93 = Language
Nepali
  toEnum Int
94 = Language
Ndebele
  toEnum Int
95 = Language
Marathi
  toEnum Int
96 = Language
Moldavian
  toEnum Int
97 = Language
Malaysian
  toEnum Int
98 = Language
Malagasay
  toEnum Int
99 = Language
Macedonian
  toEnum Int
100 = Language
Laotian
  toEnum Int
101 = Language
Korean
  toEnum Int
102 = Language
Khmer
  toEnum Int
103 = Language
Kazakh
  toEnum Int
104 = Language
Kannada
  toEnum Int
105 = Language
Japanese
  toEnum Int
106 = Language
Indonesian
  toEnum Int
107 = Language
Hindi
  toEnum Int
108 = Language
Hebrew
  toEnum Int
109 = Language
Hausa
  toEnum Int
110 = Language
Gurani
  toEnum Int
111 = Language
Gujurati
  toEnum Int
112 = Language
Greek
  toEnum Int
113 = Language
Georgian
  toEnum Int
114 = Language
Fulani
  toEnum Int
115 = Language
Dari
  toEnum Int
116 = Language
Churash
  toEnum Int
117 = Language
Chinese
  toEnum Int
118 = Language
Burmese
  toEnum Int
119 = Language
Bulgarian
  toEnum Int
120 = Language
Bengali
  toEnum Int
121 = Language
Bielorussian
  toEnum Int
122 = Language
Bambora
  toEnum Int
123 = Language
Azerbaijani
  toEnum Int
124 = Language
Assamese
  toEnum Int
125 = Language
Armenian
  toEnum Int
126 = Language
Arabic
  toEnum Int
127 = Language
Amharic
  toEnum Int
unmatched = String -> Language
forall a. HasCallStack => String -> a
error (String
"Language.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 129 "src/Foreign/Libcdio/Types/Enums.chs" #-}







-- | Internal filesystem type, including ones that conflate
-- 'Foreign.Libcdio.CdTypes.Filesystem' with
-- 'Foreign.Libcdio.CdTypes.IsoAnalysis'; these are separated in
-- 'Foreign.Libcdio.CdTypes.cdType'.
data Filesystem_ = FsAudio
                 | FsHighSierra
                 | FsIso9660
                 | FsInteractive
                 | FsHfs
                 | FsUfs
                 | FsExt2
                 | FsIsoHfs
                 | FsIso9660Interactive
                 | Fs3do
                 | FsXiso
                 | FsUdfx
                 | FsUdf
                 | FsIsoUdf
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum Filesystem_ where
  succ FsAudio = FsHighSierra
  succ FsHighSierra = FsIso9660
  succ FsIso9660 = FsInteractive
  succ FsInteractive = FsHfs
  succ FsHfs = FsUfs
  succ FsUfs = FsExt2
  succ FsExt2 = FsIsoHfs
  succ FsIsoHfs = FsIso9660Interactive
  succ FsIso9660Interactive = Fs3do
  succ Fs3do = FsXiso
  succ FsXiso = FsUdfx
  succ FsUdfx = FsUdf
  succ FsUdf = FsIsoUdf
  succ FsIsoUdf = error "Filesystem_.succ: FsIsoUdf has no successor"

  pred FsHighSierra = FsAudio
  pred FsIso9660 = FsHighSierra
  pred FsInteractive = FsIso9660
  pred FsHfs = FsInteractive
  pred FsUfs = FsHfs
  pred FsExt2 = FsUfs
  pred FsIsoHfs = FsExt2
  pred FsIso9660Interactive = FsIsoHfs
  pred Fs3do = FsIso9660Interactive
  pred FsXiso = Fs3do
  pred FsUdfx = FsXiso
  pred FsUdf = FsUdfx
  pred FsIsoUdf = FsUdf
  pred FsAudio = error "Filesystem_.pred: FsAudio 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 FsIsoUdf

  fromEnum FsAudio = 1
  fromEnum FsHighSierra = 2
  fromEnum FsIso9660 = 3
  fromEnum FsInteractive = 4
  fromEnum FsHfs = 5
  fromEnum FsUfs = 6
  fromEnum FsExt2 = 7
  fromEnum FsIsoHfs = 8
  fromEnum FsIso9660Interactive = 9
  fromEnum Fs3do = 10
  fromEnum FsXiso = 11
  fromEnum FsUdfx = 12
  fromEnum FsUdf = 13
  fromEnum FsIsoUdf = 14

  toEnum 1 = FsAudio
  toEnum 2 = FsHighSierra
  toEnum 3 = FsIso9660
  toEnum 4 = FsInteractive
  toEnum 5 = FsHfs
  toEnum 6 = FsUfs
  toEnum 7 = FsExt2
  toEnum 8 = FsIsoHfs
  toEnum 9 = FsIso9660Interactive
  toEnum 10 = Fs3do
  toEnum 11 = FsXiso
  toEnum 12 = FsUdfx
  toEnum 13 = FsUdf
  toEnum 14 = FsIsoUdf
  toEnum unmatched = error ("Filesystem_.toEnum: Cannot match " ++ show unmatched)

{-# LINE 144 "src/Foreign/Libcdio/Types/Enums.chs" #-}



-- | Higher-level descriptions of discs/filesystems.
data FilesystemClass = Xa
                     | Multisession
                     | PhotoCd
                     | HiddenTrack
                     | CommodoreCdtv
                     | Bootable
                     | VideoCd
                     | RockRidge
                     | Joliet
                     | SuperVideoCd
                     | ChoijiVideoCd
                     | XboxIsoClass
                     | Iso9660Class
  deriving (Eq,Show,Read,Ord,Bounded,Ix)
instance Enum FilesystemClass where
  succ Xa = Multisession
  succ Multisession = PhotoCd
  succ PhotoCd = HiddenTrack
  succ HiddenTrack = CommodoreCdtv
  succ CommodoreCdtv = Bootable
  succ Bootable = VideoCd
  succ VideoCd = RockRidge
  succ RockRidge = Joliet
  succ Joliet = SuperVideoCd
  succ SuperVideoCd = ChoijiVideoCd
  succ ChoijiVideoCd = XboxIsoClass
  succ XboxIsoClass = Iso9660Class
  succ Iso9660Class = error "FilesystemClass.succ: Iso9660Class has no successor"

  pred Multisession = Xa
  pred PhotoCd = Multisession
  pred HiddenTrack = PhotoCd
  pred CommodoreCdtv = HiddenTrack
  pred Bootable = CommodoreCdtv
  pred VideoCd = Bootable
  pred RockRidge = VideoCd
  pred Joliet = RockRidge
  pred SuperVideoCd = Joliet
  pred ChoijiVideoCd = SuperVideoCd
  pred XboxIsoClass = ChoijiVideoCd
  pred Iso9660Class = XboxIsoClass
  pred Xa = error "FilesystemClass.pred: Xa 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 Iso9660Class

  fromEnum Xa = 16
  fromEnum Multisession = 32
  fromEnum PhotoCd = 64
  fromEnum HiddenTrack = 128
  fromEnum CommodoreCdtv = 256
  fromEnum Bootable = 512
  fromEnum VideoCd = 1024
  fromEnum RockRidge = 2048
  fromEnum Joliet = 4096
  fromEnum SuperVideoCd = 8192
  fromEnum ChoijiVideoCd = 16384
  fromEnum XboxIsoClass = 32768
  fromEnum Iso9660Class = 65536

  toEnum 16 = Xa
  toEnum 32 = Multisession
  toEnum 64 = PhotoCd
  toEnum 128 = HiddenTrack
  toEnum 256 = CommodoreCdtv
  toEnum 512 = Bootable
  toEnum 1024 = VideoCd
  toEnum 2048 = RockRidge
  toEnum 4096 = Joliet
  toEnum 8192 = SuperVideoCd
  toEnum 16384 = ChoijiVideoCd
  toEnum 32768 = XboxIsoClass
  toEnum 65536 = Iso9660Class
  toEnum unmatched = error ("FilesystemClass.toEnum: Cannot match " ++ show unmatched)

{-# LINE 160 "src/Foreign/Libcdio/Types/Enums.chs" #-}







-- | Miscellaneous properties a device can have, typically describing hardware
-- features, which are collected in 'Foreign.Libcdio.Device.DriveMiscCaps'.
data DriveCapabilityMisc = MiscCloseTray
                         | MiscEject
                         | MiscLock
                         | MiscSelectSpeed
                         | MiscSelectDisc
                         | MiscMultiSession
                         | MiscMediaChanged
                         | MiscReset
                         | MiscFile
  deriving (Eq,Show,Read,Ord,Bounded,Ix)
instance Enum DriveCapabilityMisc where
  succ MiscCloseTray = MiscEject
  succ MiscEject = MiscLock
  succ MiscLock = MiscSelectSpeed
  succ MiscSelectSpeed = MiscSelectDisc
  succ MiscSelectDisc = MiscMultiSession
  succ MiscMultiSession = MiscMediaChanged
  succ MiscMediaChanged = MiscReset
  succ MiscReset = MiscFile
  succ MiscFile = error "DriveCapabilityMisc.succ: MiscFile has no successor"

  pred MiscEject = MiscCloseTray
  pred MiscLock = MiscEject
  pred MiscSelectSpeed = MiscLock
  pred MiscSelectDisc = MiscSelectSpeed
  pred MiscMultiSession = MiscSelectDisc
  pred MiscMediaChanged = MiscMultiSession
  pred MiscReset = MiscMediaChanged
  pred MiscFile = MiscReset
  pred MiscCloseTray = error "DriveCapabilityMisc.pred: MiscCloseTray 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 MiscFile

  fromEnum MiscCloseTray = 1
  fromEnum MiscEject = 2
  fromEnum MiscLock = 4
  fromEnum MiscSelectSpeed = 8
  fromEnum MiscSelectDisc = 16
  fromEnum MiscMultiSession = 32
  fromEnum MiscMediaChanged = 128
  fromEnum MiscReset = 256
  fromEnum MiscFile = 131072

  toEnum 1 = MiscCloseTray
  toEnum 2 = MiscEject
  toEnum 4 = MiscLock
  toEnum 8 = MiscSelectSpeed
  toEnum 16 = MiscSelectDisc
  toEnum 32 = MiscMultiSession
  toEnum 128 = MiscMediaChanged
  toEnum 256 = MiscReset
  toEnum 131072 = MiscFile
  toEnum unmatched = error ("DriveCapabilityMisc.toEnum: Cannot match " ++ show unmatched)

{-# LINE 177 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Read-related properties a device can have, mostly describing what formats
-- it understands, which are collected in 'Foreign.Libcdio.Device.DriveReadCaps'.
-- 
-- The difference between 'ReadAnalogAudio' and 'ReadDigitalAudio' is poorly
-- documented in libcdio; they have been named here according to their assumed
-- meanings (see <https://www.cdrfaq.org/faq02.html#S2-4-3>), but that pattern
-- may not be completely accurate.
data DriveCapabilityRead = ReadAnalogAudio
                         | ReadDigitalAudio
                         | ReadCdGraphics
                         | ReadCdRecordable
                         | ReadCdReWritable
                         | ReadDvdRecordable
                         | ReadDvdPlusRecordable
                         | ReadDvdRam
                         | ReadDvdRom
                         | ReadDvdReWritable
                         | ReadDvdPlusReWritable
                         | ReadC2ErrorCorrection
                         | ReadMode2Form1
                         | ReadMode2Form2
                         | ReadMcn
                         | ReadIsrc
  deriving (Eq,Show,Read,Ord,Bounded,Ix)
instance Enum DriveCapabilityRead where
  succ ReadAnalogAudio = ReadDigitalAudio
  succ ReadDigitalAudio = ReadCdGraphics
  succ ReadCdGraphics = ReadCdRecordable
  succ ReadCdRecordable = ReadCdReWritable
  succ ReadCdReWritable = ReadDvdRecordable
  succ ReadDvdRecordable = ReadDvdPlusRecordable
  succ ReadDvdPlusRecordable = ReadDvdRam
  succ ReadDvdRam = ReadDvdRom
  succ ReadDvdRom = ReadDvdReWritable
  succ ReadDvdReWritable = ReadDvdPlusReWritable
  succ ReadDvdPlusReWritable = ReadC2ErrorCorrection
  succ ReadC2ErrorCorrection = ReadMode2Form1
  succ ReadMode2Form1 = ReadMode2Form2
  succ ReadMode2Form2 = ReadMcn
  succ ReadMcn = ReadIsrc
  succ ReadIsrc = error "DriveCapabilityRead.succ: ReadIsrc has no successor"

  pred ReadDigitalAudio = ReadAnalogAudio
  pred ReadCdGraphics = ReadDigitalAudio
  pred ReadCdRecordable = ReadCdGraphics
  pred ReadCdReWritable = ReadCdRecordable
  pred ReadDvdRecordable = ReadCdReWritable
  pred ReadDvdPlusRecordable = ReadDvdRecordable
  pred ReadDvdRam = ReadDvdPlusRecordable
  pred ReadDvdRom = ReadDvdRam
  pred ReadDvdReWritable = ReadDvdRom
  pred ReadDvdPlusReWritable = ReadDvdReWritable
  pred ReadC2ErrorCorrection = ReadDvdPlusReWritable
  pred ReadMode2Form1 = ReadC2ErrorCorrection
  pred ReadMode2Form2 = ReadMode2Form1
  pred ReadMcn = ReadMode2Form2
  pred ReadIsrc = ReadMcn
  pred ReadAnalogAudio = error "DriveCapabilityRead.pred: ReadAnalogAudio 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 ReadIsrc

  fromEnum ReadAnalogAudio = 1
  fromEnum ReadDigitalAudio = 2
  fromEnum ReadCdGraphics = 4
  fromEnum ReadCdRecordable = 8
  fromEnum ReadCdReWritable = 16
  fromEnum ReadDvdRecordable = 32
  fromEnum ReadDvdPlusRecordable = 64
  fromEnum ReadDvdRam = 128
  fromEnum ReadDvdRom = 256
  fromEnum ReadDvdReWritable = 512
  fromEnum ReadDvdPlusReWritable = 1024
  fromEnum ReadC2ErrorCorrection = 2048
  fromEnum ReadMode2Form1 = 4096
  fromEnum ReadMode2Form2 = 8192
  fromEnum ReadMcn = 16384
  fromEnum ReadIsrc = 32768

  toEnum 1 = ReadAnalogAudio
  toEnum 2 = ReadDigitalAudio
  toEnum 4 = ReadCdGraphics
  toEnum 8 = ReadCdRecordable
  toEnum 16 = ReadCdReWritable
  toEnum 32 = ReadDvdRecordable
  toEnum 64 = ReadDvdPlusRecordable
  toEnum 128 = ReadDvdRam
  toEnum 256 = ReadDvdRom
  toEnum 512 = ReadDvdReWritable
  toEnum 1024 = ReadDvdPlusReWritable
  toEnum 2048 = ReadC2ErrorCorrection
  toEnum 4096 = ReadMode2Form1
  toEnum 8192 = ReadMode2Form2
  toEnum 16384 = ReadMcn
  toEnum 32768 = ReadIsrc
  toEnum unmatched = error ("DriveCapabilityRead.toEnum: Cannot match " ++ show unmatched)

{-# LINE 201 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Write-related properties a device can have, mostly describing what formats
-- it can burn, which are collected in 'Foreign.Libcdio.Device.DriveWriteCaps'.
data DriveCapabilityWrite = WriteCdRecordable
                          | WriteCdReWritable
                          | WriteDvdRecordable
                          | WriteDvdPlusRecordable
                          | WriteDvdRam
                          | WriteDvdReWritable
                          | WriteDvdPlusReWritable
                          | WriteMtRainier
                          | WriteBurnProof
  deriving (Eq,Show,Read,Ord,Bounded,Ix)
instance Enum DriveCapabilityWrite where
  succ WriteCdRecordable = WriteCdReWritable
  succ WriteCdReWritable = WriteDvdRecordable
  succ WriteDvdRecordable = WriteDvdPlusRecordable
  succ WriteDvdPlusRecordable = WriteDvdRam
  succ WriteDvdRam = WriteDvdReWritable
  succ WriteDvdReWritable = WriteDvdPlusReWritable
  succ WriteDvdPlusReWritable = WriteMtRainier
  succ WriteMtRainier = WriteBurnProof
  succ WriteBurnProof = error "DriveCapabilityWrite.succ: WriteBurnProof has no successor"

  pred WriteCdReWritable = WriteCdRecordable
  pred WriteDvdRecordable = WriteCdReWritable
  pred WriteDvdPlusRecordable = WriteDvdRecordable
  pred WriteDvdRam = WriteDvdPlusRecordable
  pred WriteDvdReWritable = WriteDvdRam
  pred WriteDvdPlusReWritable = WriteDvdReWritable
  pred WriteMtRainier = WriteDvdPlusReWritable
  pred WriteBurnProof = WriteMtRainier
  pred WriteCdRecordable = error "DriveCapabilityWrite.pred: WriteCdRecordable 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 WriteBurnProof

  fromEnum WriteCdRecordable = 1
  fromEnum WriteCdReWritable = 2
  fromEnum WriteDvdRecordable = 4
  fromEnum WriteDvdPlusRecordable = 8
  fromEnum WriteDvdRam = 16
  fromEnum WriteDvdReWritable = 32
  fromEnum WriteDvdPlusReWritable = 64
  fromEnum WriteMtRainier = 128
  fromEnum WriteBurnProof = 256

  toEnum 1 = WriteCdRecordable
  toEnum 2 = WriteCdReWritable
  toEnum 4 = WriteDvdRecordable
  toEnum 8 = WriteDvdPlusRecordable
  toEnum 16 = WriteDvdRam
  toEnum 32 = WriteDvdReWritable
  toEnum 64 = WriteDvdPlusReWritable
  toEnum 128 = WriteMtRainier
  toEnum 256 = WriteBurnProof
  toEnum unmatched = error ("DriveCapabilityWrite.toEnum: Cannot match " ++ show unmatched)

{-# LINE 220 "src/Foreign/Libcdio/Types/Enums.chs" #-}



{- Barely even used internally.
-- | Different types of device that can be read, which are collected in
-- 'Foreign.Libcdio.Device.SrcCategories'.
{#enum cdio_src_category_mask_t as SrcCategoryMask
    {underscoreToCase}
    with prefix = "cdio"
    deriving ( Eq, Show, Read, Ord, Bounded, Ix )
#}
-}


-- | The underlying type of the C @driver_id_t@, i.e. 'DriverId'.
type CDriverId = (C2HSImp.CInt)
{-# LINE 235 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Devices or file types supported by the library.
data DriverId = DriverUnknown
              | DriverAix
              | DriverFreeBsd
              | DriverNetBsd
              | DriverLinux
              | DriverSolaris
              | DriverOsX
              | DriverWin32
              | DriverCdrDao
              | DriverBinCue
              | DriverNrg
              | DriverDevice
              | DriverBsdi
              | DriverOs2
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum DriverId where
  succ DriverUnknown = DriverAix
  succ DriverAix = DriverFreeBsd
  succ DriverFreeBsd = DriverNetBsd
  succ DriverNetBsd = DriverLinux
  succ DriverLinux = DriverSolaris
  succ DriverSolaris = DriverOsX
  succ DriverOsX = DriverWin32
  succ DriverWin32 = DriverCdrDao
  succ DriverCdrDao = DriverBinCue
  succ DriverBinCue = DriverNrg
  succ DriverNrg = DriverDevice
  succ DriverDevice = DriverBsdi
  succ DriverBsdi = DriverOs2
  succ DriverOs2 = error "DriverId.succ: DriverOs2 has no successor"

  pred DriverAix = DriverUnknown
  pred DriverFreeBsd = DriverAix
  pred DriverNetBsd = DriverFreeBsd
  pred DriverLinux = DriverNetBsd
  pred DriverSolaris = DriverLinux
  pred DriverOsX = DriverSolaris
  pred DriverWin32 = DriverOsX
  pred DriverCdrDao = DriverWin32
  pred DriverBinCue = DriverCdrDao
  pred DriverNrg = DriverBinCue
  pred DriverDevice = DriverNrg
  pred DriverBsdi = DriverDevice
  pred DriverOs2 = DriverBsdi
  pred DriverUnknown = error "DriverId.pred: DriverUnknown 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 DriverOs2

  fromEnum DriverUnknown = 0
  fromEnum DriverAix = 1
  fromEnum DriverFreeBsd = 2
  fromEnum DriverNetBsd = 3
  fromEnum DriverLinux = 4
  fromEnum DriverSolaris = 5
  fromEnum DriverOsX = 6
  fromEnum DriverWin32 = 7
  fromEnum DriverCdrDao = 8
  fromEnum DriverBinCue = 9
  fromEnum DriverNrg = 10
  fromEnum DriverDevice = 11
  fromEnum DriverBsdi = 12
  fromEnum DriverOs2 = 13

  toEnum 0 = DriverUnknown
  toEnum 1 = DriverAix
  toEnum 2 = DriverFreeBsd
  toEnum 3 = DriverNetBsd
  toEnum 4 = DriverLinux
  toEnum 5 = DriverSolaris
  toEnum 6 = DriverOsX
  toEnum 7 = DriverWin32
  toEnum 8 = DriverCdrDao
  toEnum 9 = DriverBinCue
  toEnum 10 = DriverNrg
  toEnum 11 = DriverDevice
  toEnum 12 = DriverBsdi
  toEnum 13 = DriverOs2
  toEnum unmatched = error ("DriverId.toEnum: Cannot match " ++ show unmatched)

{-# LINE 255 "src/Foreign/Libcdio/Types/Enums.chs" #-}



-- | The underlying type of the C @driver_return_code_t@, i.e.
-- 'DriverReturnCode'.
type CDriverReturnCode = (C2HSImp.CInt)
{-# LINE 260 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Descriptions of various error states which may be returned by driver
-- functions.
data DriverReturnCode = MmcSenseData
                      | NoDriver
                      | BadPointer
                      | BadParameter
                      | NotPermitted
                      | Uninitialized
                      | Unsupported
                      | DriverError
                      | Success
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum DriverReturnCode where
  succ MmcSenseData = NoDriver
  succ NoDriver = BadPointer
  succ BadPointer = BadParameter
  succ BadParameter = NotPermitted
  succ NotPermitted = Uninitialized
  succ Uninitialized = Unsupported
  succ Unsupported = DriverError
  succ DriverError = Success
  succ Success = error "DriverReturnCode.succ: Success has no successor"

  pred NoDriver = MmcSenseData
  pred BadPointer = NoDriver
  pred BadParameter = BadPointer
  pred NotPermitted = BadParameter
  pred Uninitialized = NotPermitted
  pred Unsupported = Uninitialized
  pred DriverError = Unsupported
  pred Success = DriverError
  pred MmcSenseData = error "DriverReturnCode.pred: MmcSenseData 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 Success

  fromEnum MmcSenseData = (-8)
  fromEnum NoDriver = (-7)
  fromEnum BadPointer = (-6)
  fromEnum BadParameter = (-5)
  fromEnum NotPermitted = (-4)
  fromEnum Uninitialized = (-3)
  fromEnum Unsupported = (-2)
  fromEnum DriverError = (-1)
  fromEnum Success = 0

  toEnum (-8) = MmcSenseData
  toEnum (-7) = NoDriver
  toEnum (-6) = BadPointer
  toEnum (-5) = BadParameter
  toEnum (-4) = NotPermitted
  toEnum (-3) = Uninitialized
  toEnum (-2) = Unsupported
  toEnum (-1) = DriverError
  toEnum 0 = Success
  toEnum unmatched = error ("DriverReturnCode.toEnum: Cannot match " ++ show unmatched)

{-# LINE 270 "src/Foreign/Libcdio/Types/Enums.chs" #-}







-- | The underlying type of the C @discmode_t@, i.e. 'DiscMode'.
type CDiscMode = (C2HSImp.CInt)
{-# LINE 278 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | Different types of disc.  Modes are combined from several sources, along
-- with some libcdio-specific additions:
--
-- * MMC-5 6.33.3.13 (Send CUESHEET)
-- * MMC-5 Table 400 "DVD Book"
-- * GNU/Linux @\/usr\/include\/linux\/cdrom.h@
--
-- As C2HS and Haddock don't yet interact well enough to document Enum fields,
-- some of the less obvious mappings include:
--
-- * 'DataCdMode': CD-ROM form 1
-- * 'MixedCdMode': some combination of 'AudioCdMode', 'DataCdMode', and 'XaCdMode'
-- * 'DvdPlusRecordableMode': DVD+R
-- * 'DvdPlusReWritableMode': DVD+RW
data DiscMode = AudioCdMode
              | DataCdMode
              | XaCdMode
              | MixedCdMode
              | DvdRomMode
              | DvdRamMode
              | DvdRecordableMode
              | DvdReWritableMode
              | HighDefinitionDvdRomMode
              | HighDefinitionDvdRamMode
              | HighDefinitionDvdRecordableMode
              | DvdPlusRecordableMode
              | DvdPlusReWritableMode
              | DoubleLayerDvdPlusReWritableMode
              | DoubleLayerDvdPlusRecordableMode
              | OtherDvdMode
              | NoModeInfo
              | CdIMode
  deriving (Enum,Eq,Show,Read,Ord,Bounded)

{-# LINE 317 "src/Foreign/Libcdio/Types/Enums.chs" #-}







-- | The underlying type of the C @cdio_log_level_t@, i.e. 'LogLevel'.
type CLogLevel = (C2HSImp.CInt)
{-# LINE 325 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | How much detail should be recorded in the logs.
data LogLevel = LogDebug
              | LogInfo
              | LogWarn
              | LogError
              | LogAssert
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum LogLevel where
  succ LogDebug = LogInfo
  succ LogInfo = LogWarn
  succ LogWarn = LogError
  succ LogError = LogAssert
  succ LogAssert = error "LogLevel.succ: LogAssert has no successor"

  pred LogInfo = LogDebug
  pred LogWarn = LogInfo
  pred LogError = LogWarn
  pred LogAssert = LogError
  pred LogDebug = error "LogLevel.pred: LogDebug 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 LogAssert

  fromEnum LogDebug = 1
  fromEnum LogInfo = 2
  fromEnum LogWarn = 3
  fromEnum LogError = 4
  fromEnum LogAssert = 5

  toEnum 1 = LogDebug
  toEnum 2 = LogInfo
  toEnum 3 = LogWarn
  toEnum 4 = LogError
  toEnum 5 = LogAssert
  toEnum unmatched = error ("LogLevel.toEnum: Cannot match " ++ show unmatched)

{-# LINE 332 "src/Foreign/Libcdio/Types/Enums.chs" #-}







-- | How data is laid out on a disc.
data ReadMode = AudioMode
              | Mode1Form1
              | Mode1Form2
              | Mode2Form1
              | Mode2Form2
  deriving (Enum,Eq,Show,Read,Ord,Bounded)

{-# LINE 350 "src/Foreign/Libcdio/Types/Enums.chs" #-}



-- | Which location an offset passed to 'Foreign.Libcdio.Read.seek' should be
-- based on.
data Whence = SeekStart
            | SeekCurrent
            | SeekEnd
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum Whence where
  succ SeekStart = SeekCurrent
  succ SeekCurrent = SeekEnd
  succ SeekEnd = error "Whence.succ: SeekEnd has no successor"

  pred SeekCurrent = SeekStart
  pred SeekEnd = SeekCurrent
  pred SeekStart = error "Whence.pred: SeekStart 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 SeekEnd

  fromEnum SeekStart = 0
  fromEnum SeekCurrent = 1
  fromEnum SeekEnd = 2

  toEnum 0 = SeekStart
  toEnum 1 = SeekCurrent
  toEnum 2 = SeekEnd
  toEnum unmatched = error ("Whence.toEnum: Cannot match " ++ show unmatched)

{-# LINE 359 "src/Foreign/Libcdio/Types/Enums.chs" #-}







-- | Types of information stored on disc subchannels.
data SubchannelData = QChannelData
                    | CurrentPosition
                    | MediaCatalog
                    | TrackIsrc
  deriving (Eq,Show,Read,Ord,Bounded)
instance Enum SubchannelData where
  succ QChannelData = CurrentPosition
  succ CurrentPosition = MediaCatalog
  succ MediaCatalog = TrackIsrc
  succ TrackIsrc = error "SubchannelData.succ: TrackIsrc has no successor"

  pred CurrentPosition = QChannelData
  pred MediaCatalog = CurrentPosition
  pred TrackIsrc = MediaCatalog
  pred QChannelData = error "SubchannelData.pred: QChannelData 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 TrackIsrc

  fromEnum QChannelData = 0
  fromEnum CurrentPosition = 1
  fromEnum MediaCatalog = 2
  fromEnum TrackIsrc = 3

  toEnum 0 = QChannelData
  toEnum 1 = CurrentPosition
  toEnum 2 = MediaCatalog
  toEnum 3 = TrackIsrc
  toEnum unmatched = error ("SubchannelData.toEnum: Cannot match " ++ show unmatched)

{-# LINE 373 "src/Foreign/Libcdio/Types/Enums.chs" #-}



-- | Metadata describing the layout or type of data on a track.
data Flag = PreEmphasis
          | CopyPermitted
          | DataTrack
          | FourChannelAudio
          | SerialCopyManagement
  deriving (Eq,Show,Read,Ord,Bounded,Ix)
instance Enum Flag where
  succ PreEmphasis = CopyPermitted
  succ CopyPermitted = DataTrack
  succ DataTrack = FourChannelAudio
  succ FourChannelAudio = SerialCopyManagement
  succ SerialCopyManagement = error "Flag.succ: SerialCopyManagement has no successor"

  pred CopyPermitted = PreEmphasis
  pred DataTrack = CopyPermitted
  pred FourChannelAudio = DataTrack
  pred SerialCopyManagement = FourChannelAudio
  pred PreEmphasis = error "Flag.pred: PreEmphasis 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 SerialCopyManagement

  fromEnum PreEmphasis = 1
  fromEnum CopyPermitted = 2
  fromEnum DataTrack = 4
  fromEnum FourChannelAudio = 8
  fromEnum SerialCopyManagement = 16

  toEnum 1 = PreEmphasis
  toEnum 2 = CopyPermitted
  toEnum 4 = DataTrack
  toEnum 8 = FourChannelAudio
  toEnum 16 = SerialCopyManagement
  toEnum unmatched = error ("Flag.toEnum: Cannot match " ++ show unmatched)

{-# LINE 383 "src/Foreign/Libcdio/Types/Enums.chs" #-}



{- Not actually an 'Enum', but rather shortcuts for basic multiplications.
-- | How many sectors are contained in various lengths of disc.
{#enum cdio_cd_minutes_sectors as CdMinutesSectors
    {underscoreToCase}
    with prefix = "cdio"
    deriving ( Eq, Show, Read, Ord, Bounded )
#}
-}






-- | The underlying type of the C @track_format_t@, i.e. 'TrackFormat'.
type CTrackFormat = (C2HSImp.CInt)
{-# LINE 401 "src/Foreign/Libcdio/Types/Enums.chs" #-}


-- | The structure in which data is stored on a segment of a disc.  The exact
-- representation of these values is discussed in "Foreign.Libcdio.Sector".
data TrackFormat = FormatAudio
                 | FormatCdI
                 | FormatXa
                 | FormatData
                 | FormatPlaystation
  deriving (Enum,Eq,Show,Read,Ord,Bounded)

{-# LINE 412 "src/Foreign/Libcdio/Types/Enums.chs" #-}



{- Barely even used internally.
-- | The block format in which the data is saved in a track on disc.
{#enum trackmode_t as TrackMode
    {underscoreToCase}
    deriving ( Eq, Show, Read, Ord, Bounded )
#}
-}


-- | Whether a track has a particular flag specified.
data TrackFlagStatus = FlagFalse
                     | FlagTrue
                     | FlagError
                     | FlagUnknown
  deriving (Enum,Eq,Show,Read,Ord,Bounded)

{-# LINE 429 "src/Foreign/Libcdio/Types/Enums.chs" #-}







{- Similar semantics from 'Maybe Bool'.
-- | A version of 'Bool' which also provides a third, non-definitive state.
{#enum bool_3way_t as Bool3
    {nope as No, yep as Yes, dunno as Unknown}
    deriving ( Eq, Show, Read, Ix )
#}
-- Need to explicitly instance Ord and Bounded as the below is the logical
-- order, but @dunno@ is assigned @3@ in the C code.
instance Ord Bool3 where
    No <= _             = True
    _ <= Yes            = True
    Unknown <= Unknown  = True
    _ <= _              = False
instance Bounded Bool3 where
    minBound = No
    maxBound = Yes
-- Needs: Bits, FiniteBits, Generic, Rep, Data, Storable for parity with Bool
-}