-- GENERATED by C->Haskell Compiler, version 0.25.2 Snowboundest, 31 Oct 2014 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Termbox/Enums.chs" #-}
module Termbox.Enums where



data Attr = Bold
          | Underline
          | Reverse
instance Enum Attr where
  succ Bold = Underline
  succ Underline = Reverse
  succ Reverse = error "Attr.succ: Reverse has no successor"

  pred Underline = Bold
  pred Reverse = Underline
  pred Bold = error "Attr.pred: Bold 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 Reverse

  fromEnum Bold = 256
  fromEnum Underline = 512
  fromEnum Reverse = 1024

  toEnum 256 = Bold
  toEnum 512 = Underline
  toEnum 1024 = Reverse
  toEnum unmatched = error ("Attr.toEnum: Cannot match " ++ show unmatched)

{-# LINE 9 "src/Termbox/Enums.chs" #-}


data Errors = PipeTrapError
            | FailedToOpenTty
            | UnsupportedTerminal
instance Enum Errors where
  succ PipeTrapError = FailedToOpenTty
  succ FailedToOpenTty = UnsupportedTerminal
  succ UnsupportedTerminal = error "Errors.succ: UnsupportedTerminal has no successor"

  pred FailedToOpenTty = PipeTrapError
  pred UnsupportedTerminal = FailedToOpenTty
  pred PipeTrapError = error "Errors.pred: PipeTrapError 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 UnsupportedTerminal

  fromEnum PipeTrapError = (-3)
  fromEnum FailedToOpenTty = (-2)
  fromEnum UnsupportedTerminal = (-1)

  toEnum (-3) = PipeTrapError
  toEnum (-2) = FailedToOpenTty
  toEnum (-1) = UnsupportedTerminal
  toEnum unmatched = error ("Errors.toEnum: Cannot match " ++ show unmatched)

{-# LINE 15 "src/Termbox/Enums.chs" #-}


data Color = Default
           | Black
           | Red
           | Green
           | Yellow
           | Blue
           | Magenta
           | Cyan
           | White
instance Enum Color where
  succ Default = Black
  succ Black = Red
  succ Red = Green
  succ Green = Yellow
  succ Yellow = Blue
  succ Blue = Magenta
  succ Magenta = Cyan
  succ Cyan = White
  succ White = error "Color.succ: White has no successor"

  pred Black = Default
  pred Red = Black
  pred Green = Red
  pred Yellow = Green
  pred Blue = Yellow
  pred Magenta = Blue
  pred Cyan = Magenta
  pred White = Cyan
  pred Default = error "Color.pred: Default 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 White

  fromEnum Default = 0
  fromEnum Black = 1
  fromEnum Red = 2
  fromEnum Green = 3
  fromEnum Yellow = 4
  fromEnum Blue = 5
  fromEnum Magenta = 6
  fromEnum Cyan = 7
  fromEnum White = 8

  toEnum 0 = Default
  toEnum 1 = Black
  toEnum 2 = Red
  toEnum 3 = Green
  toEnum 4 = Yellow
  toEnum 5 = Blue
  toEnum 6 = Magenta
  toEnum 7 = Cyan
  toEnum 8 = White
  toEnum unmatched = error ("Color.toEnum: Cannot match " ++ show unmatched)

{-# LINE 27 "src/Termbox/Enums.chs" #-}


data Mod = Alt
instance Enum Mod where
  succ Alt = error "Mod.succ: Alt has no successor"

  pred Alt = error "Mod.pred: Alt 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 Alt

  fromEnum Alt = 1

  toEnum 1 = Alt
  toEnum unmatched = error ("Mod.toEnum: Cannot match " ++ show unmatched)

{-# LINE 31 "src/Termbox/Enums.chs" #-}


data Key = CtrlTilde
         | Ctrl_2
         | CtrlA
         | CtrlB
         | CtrlC
         | CtrlD
         | CtrlE
         | CtrlF
         | CtrlG
         | Backspace
         | CtrlH
         | Tab
         | CtrlI
         | CtrlJ
         | CtrlK
         | CtrlL
         | Enter
         | CtrlM
         | CtrlN
         | CtrlO
         | CtrlP
         | CtrlQ
         | CtrlR
         | CtrlS
         | CtrlT
         | CtrlU
         | CtrlV
         | CtrlW
         | CtrlX
         | CtrlY
         | CtrlZ
         | Esc
         | CtrlLsqBracket
         | Ctrl_3
         | Ctrl_4
         | CtrlBackslash
         | Ctrl_5
         | CtrlRsqBracket
         | Ctrl_6
         | Ctrl_7
         | CtrlSlash
         | CtrlUnderscore
         | Space
         | Backspace2
         | Ctrl_8
         | MouseWheelDown
         | MouseWheelUp
         | MouseRelease
         | MouseMiddle
         | MouseRight
         | MouseLeft
         | ArrowRight
         | ArrowLeft
         | ArrowDown
         | ArrowUp
         | Pgdn
         | Pgup
         | End
         | Home
         | Delete
         | Insert
         | F12
         | F11
         | F10
         | F9
         | F8
         | F7
         | F6
         | F5
         | F4
         | F3
         | F2
         | F1
instance Enum Key where
  succ CtrlTilde = CtrlA
  succ Ctrl_2 = CtrlA
  succ CtrlA = CtrlB
  succ CtrlB = CtrlC
  succ CtrlC = CtrlD
  succ CtrlD = CtrlE
  succ CtrlE = CtrlF
  succ CtrlF = CtrlG
  succ CtrlG = Backspace
  succ Backspace = Tab
  succ CtrlH = Tab
  succ Tab = CtrlJ
  succ CtrlI = CtrlJ
  succ CtrlJ = CtrlK
  succ CtrlK = CtrlL
  succ CtrlL = Enter
  succ Enter = CtrlN
  succ CtrlM = CtrlN
  succ CtrlN = CtrlO
  succ CtrlO = CtrlP
  succ CtrlP = CtrlQ
  succ CtrlQ = CtrlR
  succ CtrlR = CtrlS
  succ CtrlS = CtrlT
  succ CtrlT = CtrlU
  succ CtrlU = CtrlV
  succ CtrlV = CtrlW
  succ CtrlW = CtrlX
  succ CtrlX = CtrlY
  succ CtrlY = CtrlZ
  succ CtrlZ = Esc
  succ Esc = Ctrl_4
  succ CtrlLsqBracket = Ctrl_4
  succ Ctrl_3 = Ctrl_4
  succ Ctrl_4 = Ctrl_5
  succ CtrlBackslash = Ctrl_5
  succ Ctrl_5 = Ctrl_6
  succ CtrlRsqBracket = Ctrl_6
  succ Ctrl_6 = Ctrl_7
  succ Ctrl_7 = Space
  succ CtrlSlash = Space
  succ CtrlUnderscore = Space
  succ Space = Backspace2
  succ Backspace2 = MouseWheelDown
  succ Ctrl_8 = MouseWheelDown
  succ MouseWheelDown = MouseWheelUp
  succ MouseWheelUp = MouseRelease
  succ MouseRelease = MouseMiddle
  succ MouseMiddle = MouseRight
  succ MouseRight = MouseLeft
  succ MouseLeft = ArrowRight
  succ ArrowRight = ArrowLeft
  succ ArrowLeft = ArrowDown
  succ ArrowDown = ArrowUp
  succ ArrowUp = Pgdn
  succ Pgdn = Pgup
  succ Pgup = End
  succ End = Home
  succ Home = Delete
  succ Delete = Insert
  succ Insert = F12
  succ F12 = F11
  succ F11 = F10
  succ F10 = F9
  succ F9 = F8
  succ F8 = F7
  succ F7 = F6
  succ F6 = F5
  succ F5 = F4
  succ F4 = F3
  succ F3 = F2
  succ F2 = F1
  succ F1 = error "Key.succ: F1 has no successor"

  pred CtrlA = CtrlTilde
  pred CtrlB = CtrlA
  pred CtrlC = CtrlB
  pred CtrlD = CtrlC
  pred CtrlE = CtrlD
  pred CtrlF = CtrlE
  pred CtrlG = CtrlF
  pred Backspace = CtrlG
  pred CtrlH = CtrlG
  pred Tab = Backspace
  pred CtrlI = Backspace
  pred CtrlJ = Tab
  pred CtrlK = CtrlJ
  pred CtrlL = CtrlK
  pred Enter = CtrlL
  pred CtrlM = CtrlL
  pred CtrlN = Enter
  pred CtrlO = CtrlN
  pred CtrlP = CtrlO
  pred CtrlQ = CtrlP
  pred CtrlR = CtrlQ
  pred CtrlS = CtrlR
  pred CtrlT = CtrlS
  pred CtrlU = CtrlT
  pred CtrlV = CtrlU
  pred CtrlW = CtrlV
  pred CtrlX = CtrlW
  pred CtrlY = CtrlX
  pred CtrlZ = CtrlY
  pred Esc = CtrlZ
  pred CtrlLsqBracket = CtrlZ
  pred Ctrl_3 = CtrlZ
  pred Ctrl_4 = Esc
  pred CtrlBackslash = Esc
  pred Ctrl_5 = Ctrl_4
  pred CtrlRsqBracket = Ctrl_4
  pred Ctrl_6 = Ctrl_5
  pred Ctrl_7 = Ctrl_6
  pred CtrlSlash = Ctrl_6
  pred CtrlUnderscore = Ctrl_6
  pred Space = Ctrl_7
  pred Backspace2 = Space
  pred Ctrl_8 = Space
  pred MouseWheelDown = Backspace2
  pred MouseWheelUp = MouseWheelDown
  pred MouseRelease = MouseWheelUp
  pred MouseMiddle = MouseRelease
  pred MouseRight = MouseMiddle
  pred MouseLeft = MouseRight
  pred ArrowRight = MouseLeft
  pred ArrowLeft = ArrowRight
  pred ArrowDown = ArrowLeft
  pred ArrowUp = ArrowDown
  pred Pgdn = ArrowUp
  pred Pgup = Pgdn
  pred End = Pgup
  pred Home = End
  pred Delete = Home
  pred Insert = Delete
  pred F12 = Insert
  pred F11 = F12
  pred F10 = F11
  pred F9 = F10
  pred F8 = F9
  pred F7 = F8
  pred F6 = F7
  pred F5 = F6
  pred F4 = F5
  pred F3 = F4
  pred F2 = F3
  pred F1 = F2
  pred CtrlTilde = error "Key.pred: CtrlTilde has no predecessor"
  pred Ctrl_2 = error "Key.pred: Ctrl_2 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 F1

  fromEnum CtrlTilde = 0
  fromEnum Ctrl_2 = 0
  fromEnum CtrlA = 1
  fromEnum CtrlB = 2
  fromEnum CtrlC = 3
  fromEnum CtrlD = 4
  fromEnum CtrlE = 5
  fromEnum CtrlF = 6
  fromEnum CtrlG = 7
  fromEnum Backspace = 8
  fromEnum CtrlH = 8
  fromEnum Tab = 9
  fromEnum CtrlI = 9
  fromEnum CtrlJ = 10
  fromEnum CtrlK = 11
  fromEnum CtrlL = 12
  fromEnum Enter = 13
  fromEnum CtrlM = 13
  fromEnum CtrlN = 14
  fromEnum CtrlO = 15
  fromEnum CtrlP = 16
  fromEnum CtrlQ = 17
  fromEnum CtrlR = 18
  fromEnum CtrlS = 19
  fromEnum CtrlT = 20
  fromEnum CtrlU = 21
  fromEnum CtrlV = 22
  fromEnum CtrlW = 23
  fromEnum CtrlX = 24
  fromEnum CtrlY = 25
  fromEnum CtrlZ = 26
  fromEnum Esc = 27
  fromEnum CtrlLsqBracket = 27
  fromEnum Ctrl_3 = 27
  fromEnum Ctrl_4 = 28
  fromEnum CtrlBackslash = 28
  fromEnum Ctrl_5 = 29
  fromEnum CtrlRsqBracket = 29
  fromEnum Ctrl_6 = 30
  fromEnum Ctrl_7 = 31
  fromEnum CtrlSlash = 31
  fromEnum CtrlUnderscore = 31
  fromEnum Space = 32
  fromEnum Backspace2 = 127
  fromEnum Ctrl_8 = 127
  fromEnum MouseWheelDown = 65508
  fromEnum MouseWheelUp = 65509
  fromEnum MouseRelease = 65510
  fromEnum MouseMiddle = 65511
  fromEnum MouseRight = 65512
  fromEnum MouseLeft = 65513
  fromEnum ArrowRight = 65514
  fromEnum ArrowLeft = 65515
  fromEnum ArrowDown = 65516
  fromEnum ArrowUp = 65517
  fromEnum Pgdn = 65518
  fromEnum Pgup = 65519
  fromEnum End = 65520
  fromEnum Home = 65521
  fromEnum Delete = 65522
  fromEnum Insert = 65523
  fromEnum F12 = 65524
  fromEnum F11 = 65525
  fromEnum F10 = 65526
  fromEnum F9 = 65527
  fromEnum F8 = 65528
  fromEnum F7 = 65529
  fromEnum F6 = 65530
  fromEnum F5 = 65531
  fromEnum F4 = 65532
  fromEnum F3 = 65533
  fromEnum F2 = 65534
  fromEnum F1 = 65535

  toEnum 0 = CtrlTilde
  toEnum 1 = CtrlA
  toEnum 2 = CtrlB
  toEnum 3 = CtrlC
  toEnum 4 = CtrlD
  toEnum 5 = CtrlE
  toEnum 6 = CtrlF
  toEnum 7 = CtrlG
  toEnum 8 = Backspace
  toEnum 9 = Tab
  toEnum 10 = CtrlJ
  toEnum 11 = CtrlK
  toEnum 12 = CtrlL
  toEnum 13 = Enter
  toEnum 14 = CtrlN
  toEnum 15 = CtrlO
  toEnum 16 = CtrlP
  toEnum 17 = CtrlQ
  toEnum 18 = CtrlR
  toEnum 19 = CtrlS
  toEnum 20 = CtrlT
  toEnum 21 = CtrlU
  toEnum 22 = CtrlV
  toEnum 23 = CtrlW
  toEnum 24 = CtrlX
  toEnum 25 = CtrlY
  toEnum 26 = CtrlZ
  toEnum 27 = Esc
  toEnum 28 = Ctrl_4
  toEnum 29 = Ctrl_5
  toEnum 30 = Ctrl_6
  toEnum 31 = Ctrl_7
  toEnum 32 = Space
  toEnum 127 = Backspace2
  toEnum 65508 = MouseWheelDown
  toEnum 65509 = MouseWheelUp
  toEnum 65510 = MouseRelease
  toEnum 65511 = MouseMiddle
  toEnum 65512 = MouseRight
  toEnum 65513 = MouseLeft
  toEnum 65514 = ArrowRight
  toEnum 65515 = ArrowLeft
  toEnum 65516 = ArrowDown
  toEnum 65517 = ArrowUp
  toEnum 65518 = Pgdn
  toEnum 65519 = Pgup
  toEnum 65520 = End
  toEnum 65521 = Home
  toEnum 65522 = Delete
  toEnum 65523 = Insert
  toEnum 65524 = F12
  toEnum 65525 = F11
  toEnum 65526 = F10
  toEnum 65527 = F9
  toEnum 65528 = F8
  toEnum 65529 = F7
  toEnum 65530 = F6
  toEnum 65531 = F5
  toEnum 65532 = F4
  toEnum 65533 = F3
  toEnum 65534 = F2
  toEnum 65535 = F1
  toEnum unmatched = error ("Key.toEnum: Cannot match " ++ show unmatched)

{-# LINE 107 "src/Termbox/Enums.chs" #-}