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)
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)
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)
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)
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)