packages feed

termbox-bindings-hs 0.1.1 → 1.0.0

raw patch · 15 files changed

+430/−443 lines, 15 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- Termbox.Bindings.Hs: Tb_attr :: Word16 -> Tb_attr
- Termbox.Bindings.Hs: Tb_color :: Word16 -> Tb_color
- Termbox.Bindings.Hs: Tb_event_mod :: Word8 -> Tb_event_mod
- Termbox.Bindings.Hs: data Tb_input_mode
- Termbox.Bindings.Hs: newtype Tb_attr
- Termbox.Bindings.Hs: newtype Tb_color
- Termbox.Bindings.Hs: newtype Tb_event_mod
- Termbox.Bindings.Hs: pattern TB_BLACK :: Tb_color
- Termbox.Bindings.Hs: pattern TB_BLUE :: Tb_color
- Termbox.Bindings.Hs: pattern TB_BOLD :: Tb_attr
- Termbox.Bindings.Hs: pattern TB_CYAN :: Tb_color
- Termbox.Bindings.Hs: pattern TB_DEFAULT :: Tb_color
- Termbox.Bindings.Hs: pattern TB_GREEN :: Tb_color
- Termbox.Bindings.Hs: pattern TB_INPUT_ALT :: Tb_input_mode
- Termbox.Bindings.Hs: pattern TB_INPUT_CURRENT :: Tb_input_mode
- Termbox.Bindings.Hs: pattern TB_INPUT_ESC :: Tb_input_mode
- Termbox.Bindings.Hs: pattern TB_INPUT_MOUSE :: Tb_input_mode
- Termbox.Bindings.Hs: pattern TB_MAGENTA :: Tb_color
- Termbox.Bindings.Hs: pattern TB_OUTPUT_CURRENT :: Tb_output_mode
- Termbox.Bindings.Hs: pattern TB_RED :: Tb_color
- Termbox.Bindings.Hs: pattern TB_REVERSE :: Tb_attr
- Termbox.Bindings.Hs: pattern TB_UNDERLINE :: Tb_attr
- Termbox.Bindings.Hs: pattern TB_WHITE :: Tb_color
- Termbox.Bindings.Hs: pattern TB_YELLOW :: Tb_color
- Termbox.Bindings.Hs: tb_attr :: Tb_attr -> Tb_color -> Tb_color
+ Termbox.Bindings.Hs: Tb_attrs :: Word16 -> Tb_attrs
+ Termbox.Bindings.Hs: Tb_input_mode :: CInt -> Tb_input_mode
+ Termbox.Bindings.Hs: _TB_BLACK :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_BLUE :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_BOLD :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_CYAN :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_DEFAULT :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_GREEN :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_INPUT_ALT :: Tb_input_mode
+ Termbox.Bindings.Hs: _TB_INPUT_ESC :: Tb_input_mode
+ Termbox.Bindings.Hs: _TB_INPUT_MOUSE :: Tb_input_mode
+ Termbox.Bindings.Hs: _TB_MAGENTA :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_RED :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_REVERSE :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_UNDERLINE :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_WHITE :: Tb_attrs
+ Termbox.Bindings.Hs: _TB_YELLOW :: Tb_attrs
+ Termbox.Bindings.Hs: data Tb_event_mod
+ Termbox.Bindings.Hs: newtype Tb_attrs
+ Termbox.Bindings.Hs: newtype Tb_input_mode
+ Termbox.Bindings.Hs: tb_get_input_mode :: IO Tb_input_mode
+ Termbox.Bindings.Hs: tb_get_output_mode :: IO Tb_output_mode
- Termbox.Bindings.Hs: Tb_cell :: {-# UNPACK #-} !Char -> {-# UNPACK #-} !Tb_attr -> {-# UNPACK #-} !Tb_attr -> Tb_cell
+ Termbox.Bindings.Hs: Tb_cell :: {-# UNPACK #-} !Char -> {-# UNPACK #-} !Tb_attrs -> {-# UNPACK #-} !Tb_attrs -> Tb_cell
- Termbox.Bindings.Hs: Tb_event :: {-# UNPACK #-} !Tb_event_type -> {-# UNPACK #-} !Tb_event_mod -> {-# UNPACK #-} !Tb_key -> {-# UNPACK #-} !Char -> {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Int32 -> Tb_event
+ Termbox.Bindings.Hs: Tb_event :: {-# UNPACK #-} !Tb_event_type -> !Maybe Tb_event_mod -> {-# UNPACK #-} !Tb_key -> {-# UNPACK #-} !Char -> {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Int32 -> Tb_event
- Termbox.Bindings.Hs: [$sel:bg:Tb_cell] :: Tb_cell -> {-# UNPACK #-} !Tb_attr
+ Termbox.Bindings.Hs: [$sel:bg:Tb_cell] :: Tb_cell -> {-# UNPACK #-} !Tb_attrs
- Termbox.Bindings.Hs: [$sel:fg:Tb_cell] :: Tb_cell -> {-# UNPACK #-} !Tb_attr
+ Termbox.Bindings.Hs: [$sel:fg:Tb_cell] :: Tb_cell -> {-# UNPACK #-} !Tb_attrs
- Termbox.Bindings.Hs: [$sel:mod:Tb_event] :: Tb_event -> {-# UNPACK #-} !Tb_event_mod
+ Termbox.Bindings.Hs: [$sel:mod:Tb_event] :: Tb_event -> !Maybe Tb_event_mod
- Termbox.Bindings.Hs: tb_change_cell :: Int -> Int -> Char -> Tb_color -> Tb_color -> IO ()
+ Termbox.Bindings.Hs: tb_change_cell :: Int -> Int -> Char -> Tb_attrs -> Tb_attrs -> IO ()
- Termbox.Bindings.Hs: tb_select_input_mode :: Tb_input_mode -> IO Tb_input_mode
+ Termbox.Bindings.Hs: tb_select_input_mode :: Tb_input_mode -> IO ()
- Termbox.Bindings.Hs: tb_select_output_mode :: Tb_output_mode -> IO Tb_output_mode
+ Termbox.Bindings.Hs: tb_select_output_mode :: Tb_output_mode -> IO ()
- Termbox.Bindings.Hs: tb_set_clear_attributes :: Tb_color -> Tb_color -> IO ()
+ Termbox.Bindings.Hs: tb_set_clear_attributes :: Tb_attrs -> Tb_attrs -> IO ()

Files

CHANGELOG.md view
@@ -1,3 +1,16 @@+## [1.0.0] - November 14, 2023++- Rework `Tb_attr` and `Tb_color` into `Tb_attrs`+- Rework `Tb_select_input_mode` and `Tb_input_mode`+- Rework `Tb_select_output_mode` and `Tb_output_mode`+- Make `mod` field of `Tb_event` a `Maybe Tb_event_mod` rather than a `Tb_event_mod`+- Make `Show` instance of `Tb_key` not call `error` on unknown keys+- Improve `Show` instance of `Tb_event_mod`, `Tb_input_mode`+- Hide representation of `Tb_event_mod`+- Add `Exception` instance for `Tb_init_error`+- Remove `tb_attr`+- Remove `Ord` instances of `Tb_cell`, `Tb_event`, `Tb_event_mod`, `Tb_event_type`, `Tb_init_error`, `Tb_input_mode`, `Tb_output_mode`+ ## [0.1.1] - November 5, 2023  - Add `Monoid` instance for `Tb_attr`
src/Termbox/Bindings/Hs.hs view
@@ -16,8 +16,12 @@     tb_init_file,     tb_shutdown, -    -- ** Get\/set input\/output mode+    -- ** Get or set input mode+    tb_get_input_mode,     tb_select_input_mode,++    -- ** Get or set output mode+    tb_get_output_mode,     tb_select_output_mode,      -- ** Get terminal dimensions@@ -28,9 +32,6 @@     tb_peek_event,     tb_poll_event, -    -- ** Style a color-    tb_attr,-     -- ** Set a cell     tb_set_cursor,     tb_put_cell,@@ -42,29 +43,23 @@     tb_present,      -- * Types-    Tb_attr-      ( Tb_attr,-        TB_BOLD,-        TB_REVERSE,-        TB_UNDERLINE-      ),     Tb_cell (..),-    Tb_color-      ( Tb_color,-        TB_DEFAULT,-        TB_BLACK,-        TB_BLUE,-        TB_CYAN,-        TB_GREEN,-        TB_MAGENTA,-        TB_RED,-        TB_WHITE,-        TB_YELLOW-      ),+    Tb_attrs (Tb_attrs),+    _TB_DEFAULT,+    _TB_BLACK,+    _TB_BLUE,+    _TB_CYAN,+    _TB_GREEN,+    _TB_MAGENTA,+    _TB_RED,+    _TB_WHITE,+    _TB_YELLOW,+    _TB_BOLD,+    _TB_REVERSE,+    _TB_UNDERLINE,     Tb_event (..),     Tb_event_mod-      ( Tb_event_mod,-        TB_MOD_ALT,+      ( TB_MOD_ALT,         TB_MOD_MOTION       ),     Tb_event_type@@ -77,12 +72,10 @@         TB_EPIPE_TRAP_ERROR,         TB_EUNSUPPORTED_TERMINAL       ),-    Tb_input_mode-      ( TB_INPUT_CURRENT,-        TB_INPUT_ALT,-        TB_INPUT_ESC,-        TB_INPUT_MOUSE-      ),+    Tb_input_mode (Tb_input_mode),+    _TB_INPUT_ALT,+    _TB_INPUT_ESC,+    _TB_INPUT_MOUSE,     Tb_key       ( TB_KEY_ARROW_DOWN,         TB_KEY_ARROW_LEFT,@@ -159,8 +152,7 @@         TB_KEY_TAB       ),     Tb_output_mode-      ( TB_OUTPUT_CURRENT,-        TB_OUTPUT_216,+      ( TB_OUTPUT_216,         TB_OUTPUT_256,         TB_OUTPUT_GRAYSCALE,         TB_OUTPUT_NORMAL@@ -169,15 +161,29 @@ where  import Termbox.Bindings.C (tb_clear, tb_present, tb_shutdown)-import Termbox.Bindings.Hs.Internal.Attr (Tb_attr (..))+import Termbox.Bindings.Hs.Internal.Attrs+  ( Tb_attrs (..),+    _TB_BLACK,+    _TB_BLUE,+    _TB_BOLD,+    _TB_CYAN,+    _TB_DEFAULT,+    _TB_GREEN,+    _TB_MAGENTA,+    _TB_RED,+    _TB_REVERSE,+    _TB_UNDERLINE,+    _TB_WHITE,+    _TB_YELLOW,+  ) import Termbox.Bindings.Hs.Internal.Cell (Tb_cell (..))-import Termbox.Bindings.Hs.Internal.Color (Tb_color (..)) import Termbox.Bindings.Hs.Internal.Event (Tb_event (..)) import Termbox.Bindings.Hs.Internal.EventMod (Tb_event_mod (..)) import Termbox.Bindings.Hs.Internal.EventType (Tb_event_type (..)) import Termbox.Bindings.Hs.Internal.Functions-  ( tb_attr,-    tb_change_cell,+  ( tb_change_cell,+    tb_get_input_mode,+    tb_get_output_mode,     tb_height,     tb_init,     tb_init_fd,@@ -192,6 +198,11 @@     tb_width,   ) import Termbox.Bindings.Hs.Internal.InitError (Tb_init_error (..))-import Termbox.Bindings.Hs.Internal.InputMode (Tb_input_mode (..))+import Termbox.Bindings.Hs.Internal.InputMode+  ( Tb_input_mode (Tb_input_mode),+    _TB_INPUT_ALT,+    _TB_INPUT_ESC,+    _TB_INPUT_MOUSE,+  ) import Termbox.Bindings.Hs.Internal.Key (Tb_key (..)) import Termbox.Bindings.Hs.Internal.OutputMode (Tb_output_mode (..))
− src/Termbox/Bindings/Hs/Internal/Attr.hs
@@ -1,44 +0,0 @@-module Termbox.Bindings.Hs.Internal.Attr-  ( Tb_attr-      ( Tb_attr,-        TB_BOLD,-        TB_REVERSE,-        TB_UNDERLINE-      ),-  )-where--import Data.Bits ((.|.))-import Data.Word (Word16)-import qualified Termbox.Bindings.C---- | An attribute.-newtype Tb_attr-  = Tb_attr Word16-  deriving stock (Eq, Ord, Show)--instance Monoid Tb_attr where-  mempty =-    Tb_attr 0--instance Semigroup Tb_attr where-  Tb_attr cx <> Tb_attr cy =-    Tb_attr (cx .|. cy)--pattern TB_BOLD :: Tb_attr-pattern TB_BOLD <--  ((== Tb_attr Termbox.Bindings.C._TB_BOLD) -> True)-  where-    TB_BOLD = Tb_attr Termbox.Bindings.C._TB_BOLD--pattern TB_REVERSE :: Tb_attr-pattern TB_REVERSE <--  ((== Tb_attr Termbox.Bindings.C._TB_REVERSE) -> True)-  where-    TB_REVERSE = Tb_attr Termbox.Bindings.C._TB_REVERSE--pattern TB_UNDERLINE :: Tb_attr-pattern TB_UNDERLINE <--  ((== Tb_attr Termbox.Bindings.C._TB_UNDERLINE) -> True)-  where-    TB_UNDERLINE = Tb_attr Termbox.Bindings.C._TB_UNDERLINE
+ src/Termbox/Bindings/Hs/Internal/Attrs.hs view
@@ -0,0 +1,80 @@+module Termbox.Bindings.Hs.Internal.Attrs+  ( Tb_attrs (Tb_attrs),+    _TB_DEFAULT,+    _TB_BLACK,+    _TB_BLUE,+    _TB_CYAN,+    _TB_GREEN,+    _TB_MAGENTA,+    _TB_RED,+    _TB_WHITE,+    _TB_YELLOW,+    _TB_BOLD,+    _TB_REVERSE,+    _TB_UNDERLINE,+  )+where++import Data.Bits ((.|.))+import Data.Coerce (coerce)+import Data.Word (Word16)+import qualified Termbox.Bindings.C as Termbox++-- | Cell attributes.+newtype Tb_attrs+  = Tb_attrs Word16+  deriving stock (Eq, Show)++instance Monoid Tb_attrs where+  mempty = Tb_attrs 0++instance Semigroup Tb_attrs where+  (<>) = coerce @(Word16 -> Word16 -> Word16) (.|.)++_TB_DEFAULT :: Tb_attrs+_TB_DEFAULT =+  Tb_attrs Termbox._TB_DEFAULT++_TB_BLACK :: Tb_attrs+_TB_BLACK =+  Tb_attrs Termbox._TB_BLACK++_TB_BLUE :: Tb_attrs+_TB_BLUE =+  Tb_attrs Termbox._TB_BLUE++_TB_CYAN :: Tb_attrs+_TB_CYAN =+  Tb_attrs Termbox._TB_CYAN++_TB_GREEN :: Tb_attrs+_TB_GREEN =+  Tb_attrs Termbox._TB_GREEN++_TB_MAGENTA :: Tb_attrs+_TB_MAGENTA =+  Tb_attrs Termbox._TB_MAGENTA++_TB_RED :: Tb_attrs+_TB_RED =+  Tb_attrs Termbox._TB_RED++_TB_WHITE :: Tb_attrs+_TB_WHITE =+  Tb_attrs Termbox._TB_WHITE++_TB_YELLOW :: Tb_attrs+_TB_YELLOW =+  Tb_attrs Termbox._TB_YELLOW++_TB_BOLD :: Tb_attrs+_TB_BOLD =+  Tb_attrs Termbox._TB_BOLD++_TB_REVERSE :: Tb_attrs+_TB_REVERSE =+  Tb_attrs Termbox._TB_REVERSE++_TB_UNDERLINE :: Tb_attrs+_TB_UNDERLINE =+  Tb_attrs Termbox._TB_UNDERLINE
src/Termbox/Bindings/Hs/Internal/Cell.hs view
@@ -5,24 +5,24 @@ where  import GHC.Generics (Generic)-import qualified Termbox.Bindings.C-import Termbox.Bindings.Hs.Internal.Attr (Tb_attr (..))+import qualified Termbox.Bindings.C as Termbox+import Termbox.Bindings.Hs.Internal.Attrs (Tb_attrs (..)) import Termbox.Bindings.Hs.Internal.Prelude (charToWord32)  -- | A cell. data Tb_cell = Tb_cell   { -- | A unicode character.     ch :: {-# UNPACK #-} !Char,-    -- | Foreground attribute.-    fg :: {-# UNPACK #-} !Tb_attr,-    -- | Background attribute.-    bg :: {-# UNPACK #-} !Tb_attr+    -- | Foreground attributes.+    fg :: {-# UNPACK #-} !Tb_attrs,+    -- | Background attributes.+    bg :: {-# UNPACK #-} !Tb_attrs   }-  deriving stock (Eq, Generic, Ord, Show)+  deriving stock (Eq, Generic, Show) -cellToCCell :: Tb_cell -> Termbox.Bindings.C.Tb_cell-cellToCCell Tb_cell {ch, fg = Tb_attr fg, bg = Tb_attr bg} =-  Termbox.Bindings.C.Tb_cell+cellToCCell :: Tb_cell -> Termbox.Tb_cell+cellToCCell Tb_cell {ch, fg = Tb_attrs fg, bg = Tb_attrs bg} =+  Termbox.Tb_cell     { ch = charToWord32 ch,       fg,       bg
− src/Termbox/Bindings/Hs/Internal/Color.hs
@@ -1,78 +0,0 @@-module Termbox.Bindings.Hs.Internal.Color-  ( Tb_color-      ( Tb_color,-        TB_DEFAULT,-        TB_BLACK,-        TB_BLUE,-        TB_CYAN,-        TB_GREEN,-        TB_MAGENTA,-        TB_RED,-        TB_WHITE,-        TB_YELLOW-      ),-  )-where--import Data.Word (Word16)-import qualified Termbox.Bindings.C---- | A color.-newtype Tb_color-  = Tb_color Word16-  deriving stock (Eq, Ord)-  deriving newtype (Num, Show)--pattern TB_DEFAULT :: Tb_color-pattern TB_DEFAULT <--  ((== Tb_color Termbox.Bindings.C._TB_DEFAULT) -> True)-  where-    TB_DEFAULT = Tb_color Termbox.Bindings.C._TB_DEFAULT--pattern TB_BLACK :: Tb_color-pattern TB_BLACK <--  ((== Tb_color Termbox.Bindings.C._TB_BLACK) -> True)-  where-    TB_BLACK = Tb_color Termbox.Bindings.C._TB_BLACK--pattern TB_BLUE :: Tb_color-pattern TB_BLUE <--  ((== Tb_color Termbox.Bindings.C._TB_BLUE) -> True)-  where-    TB_BLUE = Tb_color Termbox.Bindings.C._TB_BLUE--pattern TB_CYAN :: Tb_color-pattern TB_CYAN <--  ((== Tb_color Termbox.Bindings.C._TB_CYAN) -> True)-  where-    TB_CYAN = Tb_color Termbox.Bindings.C._TB_CYAN--pattern TB_GREEN :: Tb_color-pattern TB_GREEN <--  ((== Tb_color Termbox.Bindings.C._TB_GREEN) -> True)-  where-    TB_GREEN = Tb_color Termbox.Bindings.C._TB_GREEN--pattern TB_MAGENTA :: Tb_color-pattern TB_MAGENTA <--  ((== Tb_color Termbox.Bindings.C._TB_MAGENTA) -> True)-  where-    TB_MAGENTA = Tb_color Termbox.Bindings.C._TB_MAGENTA--pattern TB_RED :: Tb_color-pattern TB_RED <--  ((== Tb_color Termbox.Bindings.C._TB_RED) -> True)-  where-    TB_RED = Tb_color Termbox.Bindings.C._TB_RED--pattern TB_WHITE :: Tb_color-pattern TB_WHITE <--  ((== Tb_color Termbox.Bindings.C._TB_WHITE) -> True)-  where-    TB_WHITE = Tb_color Termbox.Bindings.C._TB_WHITE--pattern TB_YELLOW :: Tb_color-pattern TB_YELLOW <--  ((== Tb_color Termbox.Bindings.C._TB_YELLOW) -> True)-  where-    TB_YELLOW = Tb_color Termbox.Bindings.C._TB_YELLOW
src/Termbox/Bindings/Hs/Internal/Event.hs view
@@ -6,7 +6,7 @@  import Data.Int (Int32) import GHC.Generics (Generic)-import qualified Termbox.Bindings.C+import qualified Termbox.Bindings.C as Termbox import Termbox.Bindings.Hs.Internal.EventMod (Tb_event_mod (..)) import Termbox.Bindings.Hs.Internal.EventType (Tb_event_type (..)) import Termbox.Bindings.Hs.Internal.Key (Tb_key (..))@@ -16,7 +16,7 @@ -- | An event. data Tb_event = Tb_event   { type_ :: {-# UNPACK #-} !Tb_event_type,-    mod :: {-# UNPACK #-} !Tb_event_mod,+    mod :: !(Maybe Tb_event_mod),     key :: {-# UNPACK #-} !Tb_key,     ch :: {-# UNPACK #-} !Char,     w :: {-# UNPACK #-} !Int32,@@ -24,13 +24,13 @@     x :: {-# UNPACK #-} !Int32,     y :: {-# UNPACK #-} !Int32   }-  deriving stock (Eq, Generic, Ord, Show)+  deriving stock (Eq, Generic, Show) -ceventToEvent :: Termbox.Bindings.C.Tb_event -> Tb_event-ceventToEvent Termbox.Bindings.C.Tb_event {type_, mod, key, ch, w, h, x, y} =+ceventToEvent :: Termbox.Tb_event -> Tb_event+ceventToEvent Termbox.Tb_event {type_, mod, key, ch, w, h, x, y} =   Tb_event     { type_ = Tb_event_type type_,-      mod = Tb_event_mod mod,+      mod = if mod == 0 then Nothing else Just (Tb_event_mod mod),       key = Tb_key key,       ch = word32ToChar ch,       w,
src/Termbox/Bindings/Hs/Internal/EventMod.hs view
@@ -13,8 +13,13 @@ -- | An event modifier. newtype Tb_event_mod   = Tb_event_mod Word8-  deriving stock (Eq, Ord, Show)+  deriving stock (Eq) +instance Show Tb_event_mod where+  show = \case+    TB_MOD_ALT -> "TB_MOD_ALT"+    TB_MOD_MOTION -> "TB_MOD_MOTION"+ pattern TB_MOD_ALT :: Tb_event_mod pattern TB_MOD_ALT <-   ((== Tb_event_mod Termbox.Bindings.C._TB_MOD_ALT) -> True)@@ -26,3 +31,6 @@   ((== Tb_event_mod Termbox.Bindings.C._TB_MOD_MOTION) -> True)   where     TB_MOD_MOTION = Tb_event_mod Termbox.Bindings.C._TB_MOD_MOTION++-- N.B. This requires Tb_event_mod to remain abstract+{-# COMPLETE TB_MOD_ALT, TB_MOD_MOTION #-}
src/Termbox/Bindings/Hs/Internal/EventType.hs view
@@ -9,12 +9,12 @@ where  import Data.Word (Word8)-import qualified Termbox.Bindings.C+import Termbox.Bindings.C (_TB_EVENT_KEY, _TB_EVENT_MOUSE, _TB_EVENT_RESIZE)  -- | An event type. newtype Tb_event_type   = Tb_event_type Word8-  deriving stock (Eq, Ord)+  deriving stock (Eq)  instance Show Tb_event_type where   show = \case@@ -24,20 +24,21 @@  pattern TB_EVENT_KEY :: Tb_event_type pattern TB_EVENT_KEY <--  ((== Tb_event_type Termbox.Bindings.C._TB_EVENT_KEY) -> True)+  ((== Tb_event_type _TB_EVENT_KEY) -> True)   where-    TB_EVENT_KEY = Tb_event_type Termbox.Bindings.C._TB_EVENT_KEY+    TB_EVENT_KEY = Tb_event_type _TB_EVENT_KEY  pattern TB_EVENT_MOUSE :: Tb_event_type pattern TB_EVENT_MOUSE <--  ((== Tb_event_type Termbox.Bindings.C._TB_EVENT_MOUSE) -> True)+  ((== Tb_event_type _TB_EVENT_MOUSE) -> True)   where-    TB_EVENT_MOUSE = Tb_event_type Termbox.Bindings.C._TB_EVENT_MOUSE+    TB_EVENT_MOUSE = Tb_event_type _TB_EVENT_MOUSE  pattern TB_EVENT_RESIZE :: Tb_event_type pattern TB_EVENT_RESIZE <--  ((== Tb_event_type Termbox.Bindings.C._TB_EVENT_RESIZE) -> True)+  ((== Tb_event_type _TB_EVENT_RESIZE) -> True)   where-    TB_EVENT_RESIZE = Tb_event_type Termbox.Bindings.C._TB_EVENT_RESIZE+    TB_EVENT_RESIZE = Tb_event_type _TB_EVENT_RESIZE +-- N.B. This requires Tb_event_type to remain abstract {-# COMPLETE TB_EVENT_KEY, TB_EVENT_MOUSE, TB_EVENT_RESIZE #-}
src/Termbox/Bindings/Hs/Internal/Functions.hs view
@@ -1,43 +1,38 @@ module Termbox.Bindings.Hs.Internal.Functions-  ( tb_init,+  ( tb_change_cell,+    tb_get_input_mode,+    tb_get_output_mode,+    tb_height,+    tb_init,     tb_init_fd,     tb_init_file,-    tb_select_input_mode,-    tb_select_output_mode,-    tb_width,-    tb_height,     tb_peek_event,     tb_poll_event,-    tb_attr,-    tb_set_cursor,     tb_put_cell,-    tb_change_cell,+    tb_select_input_mode,+    tb_select_output_mode,     tb_set_clear_attributes,+    tb_set_cursor,+    tb_width,   ) where -import Data.Bits ((.|.)) import Data.Coerce (coerce)-import Data.Word (Word16)+import Data.Functor (void)+import Foreign.C (CInt (..)) import Foreign.C.String (withCString) import Foreign.Marshal.Alloc (alloca) import qualified Foreign.Storable as Storable import System.Posix.Types (Fd (Fd))-import qualified Termbox.Bindings.C-import Termbox.Bindings.Hs.Internal.Attr (Tb_attr (..))+import qualified Termbox.Bindings.C as Termbox+import Termbox.Bindings.Hs.Internal.Attrs (Tb_attrs (..)) import Termbox.Bindings.Hs.Internal.Cell (Tb_cell, cellToCCell)-import Termbox.Bindings.Hs.Internal.Color (Tb_color (..)) import Termbox.Bindings.Hs.Internal.Event (Tb_event, ceventToEvent) import Termbox.Bindings.Hs.Internal.InitError (Tb_init_error (..)) import Termbox.Bindings.Hs.Internal.InputMode (Tb_input_mode (..)) import Termbox.Bindings.Hs.Internal.OutputMode (Tb_output_mode (..)) import Termbox.Bindings.Hs.Internal.Prelude (charToWord32, cintToInt, intToCInt) --- | Set the attribute of a color.-tb_attr :: Tb_attr -> Tb_color -> Tb_color-tb_attr =-  coerce ((.|.) :: Word16 -> Word16 -> Word16)- -- | Set a cell value in the back buffer. tb_change_cell ::   -- | x@@ -47,22 +42,32 @@   -- | ch   Char ->   -- | fg-  Tb_color ->+  Tb_attrs ->   -- | bg-  Tb_color ->+  Tb_attrs ->   IO ()-tb_change_cell cx cy c (Tb_color foreground) (Tb_color background) =-  Termbox.Bindings.C.tb_change_cell (intToCInt cx) (intToCInt cy) (charToWord32 c) foreground background+tb_change_cell cx cy c (Tb_attrs foreground) (Tb_attrs background) =+  Termbox.tb_change_cell (intToCInt cx) (intToCInt cy) (charToWord32 c) foreground background +-- | Get the input mode.+tb_get_input_mode :: IO Tb_input_mode+tb_get_input_mode =+  coerce Termbox.tb_select_input_mode Termbox._TB_INPUT_CURRENT++-- | Get the output mode.+tb_get_output_mode :: IO Tb_output_mode+tb_get_output_mode =+  coerce Termbox.tb_select_output_mode Termbox._TB_OUTPUT_CURRENT+ -- | Get the terminal height. tb_height :: IO Int tb_height =-  cintToInt <$> Termbox.Bindings.C.tb_height+  cintToInt <$> Termbox.tb_height  -- | Initialize the @termbox@ library. tb_init :: IO (Either Tb_init_error ()) tb_init = do-  code <- Termbox.Bindings.C.tb_init+  code <- Termbox.tb_init   pure     if code == 0       then Right ()@@ -73,7 +78,7 @@ -- > tb_init = tb_init_fd(0) tb_init_fd :: Fd -> IO (Either Tb_init_error ()) tb_init_fd (Fd fd) = do-  code <- Termbox.Bindings.C.tb_init_fd fd+  code <- Termbox.tb_init_fd fd   pure     if code == 0       then Right ()@@ -86,7 +91,7 @@ tb_init_file file = do   code <-     withCString file \c_file ->-      Termbox.Bindings.C.tb_init_file c_file+      Termbox.tb_init_file c_file   pure     if code == 0       then Right ()@@ -96,7 +101,7 @@ tb_peek_event :: Int -> IO (Either () (Maybe Tb_event)) tb_peek_event timeout =   alloca \c_event -> do-    result <- Termbox.Bindings.C.tb_peek_event c_event (intToCInt timeout)+    result <- Termbox.tb_peek_event c_event (intToCInt timeout)     if result < 0       then pure (Left ())       else@@ -108,7 +113,7 @@ tb_poll_event :: IO (Either () Tb_event) tb_poll_event =   alloca \c_event -> do-    result <- Termbox.Bindings.C.tb_poll_event c_event+    result <- Termbox.tb_poll_event c_event     if result < 0       then pure (Left ())       else Right . ceventToEvent <$> Storable.peek c_event@@ -125,38 +130,38 @@ tb_put_cell cx cy cell =   alloca \c_cell -> do     Storable.poke c_cell (cellToCCell cell)-    Termbox.Bindings.C.tb_put_cell (intToCInt cx) (intToCInt cy) c_cell+    Termbox.tb_put_cell (intToCInt cx) (intToCInt cy) c_cell --- | Get\/set the input mode.-tb_select_input_mode :: Tb_input_mode -> IO Tb_input_mode-tb_select_input_mode =-  coerce Termbox.Bindings.C.tb_select_input_mode+-- | Set the input mode.+tb_select_input_mode :: Tb_input_mode -> IO ()+tb_select_input_mode (Tb_input_mode mode) =+  void (Termbox.tb_select_input_mode mode) --- | Get\/set the output mode.-tb_select_output_mode :: Tb_output_mode -> IO Tb_output_mode-tb_select_output_mode =-  coerce Termbox.Bindings.C.tb_select_output_mode+-- | Set the output mode.+tb_select_output_mode :: Tb_output_mode -> IO ()+tb_select_output_mode (Tb_output_mode mode) =+  void (Termbox.tb_select_output_mode mode)  -- | Set the foreground and background attributes that 'tb_clear' clears the back buffer with. tb_set_clear_attributes ::   -- | fg-  Tb_color ->+  Tb_attrs ->   -- | bg-  Tb_color ->+  Tb_attrs ->   IO ()-tb_set_clear_attributes (Tb_color foreground) (Tb_color background) =-  Termbox.Bindings.C.tb_set_clear_attributes foreground background+tb_set_clear_attributes =+  coerce Termbox.tb_set_clear_attributes --- | Set the cursor location, or hide it.+-- | Set or hide the cursor location. tb_set_cursor ::   -- | x, y   Maybe (Int, Int) ->   IO () tb_set_cursor = \case-  Nothing -> Termbox.Bindings.C.tb_set_cursor Termbox.Bindings.C._TB_HIDE_CURSOR Termbox.Bindings.C._TB_HIDE_CURSOR-  Just (cx, cy) -> Termbox.Bindings.C.tb_set_cursor (intToCInt cx) (intToCInt cy)+  Nothing -> Termbox.tb_set_cursor Termbox._TB_HIDE_CURSOR Termbox._TB_HIDE_CURSOR+  Just (cx, cy) -> Termbox.tb_set_cursor (intToCInt cx) (intToCInt cy)  -- | Get the terminal width. tb_width :: IO Int tb_width =-  cintToInt <$> Termbox.Bindings.C.tb_width+  cintToInt <$> Termbox.tb_width
src/Termbox/Bindings/Hs/Internal/InitError.hs view
@@ -8,13 +8,15 @@   ) where +import Control.Exception (Exception) import Foreign.C.Types (CInt)-import qualified Termbox.Bindings.C+import Termbox.Bindings.C (_TB_EFAILED_TO_OPEN_TTY, _TB_EPIPE_TRAP_ERROR, _TB_EUNSUPPORTED_TERMINAL)  -- | A 'tb_init' error. newtype Tb_init_error   = Tb_init_error CInt-  deriving stock (Eq, Ord)+  deriving anyclass (Exception)+  deriving stock (Eq)  instance Show Tb_init_error where   show = \case@@ -24,20 +26,21 @@  pattern TB_EFAILED_TO_OPEN_TTY :: Tb_init_error pattern TB_EFAILED_TO_OPEN_TTY <--  ((== Tb_init_error Termbox.Bindings.C._TB_EFAILED_TO_OPEN_TTY) -> True)+  ((== Tb_init_error _TB_EFAILED_TO_OPEN_TTY) -> True)   where-    TB_EFAILED_TO_OPEN_TTY = Tb_init_error Termbox.Bindings.C._TB_EFAILED_TO_OPEN_TTY+    TB_EFAILED_TO_OPEN_TTY = Tb_init_error _TB_EFAILED_TO_OPEN_TTY  pattern TB_EPIPE_TRAP_ERROR :: Tb_init_error pattern TB_EPIPE_TRAP_ERROR <-   ((== Tb_init_error Termbox.Bindings.C._TB_EPIPE_TRAP_ERROR) -> True)   where-    TB_EPIPE_TRAP_ERROR = Tb_init_error Termbox.Bindings.C._TB_EPIPE_TRAP_ERROR+    TB_EPIPE_TRAP_ERROR = Tb_init_error _TB_EPIPE_TRAP_ERROR  pattern TB_EUNSUPPORTED_TERMINAL :: Tb_init_error pattern TB_EUNSUPPORTED_TERMINAL <--  ((== Tb_init_error Termbox.Bindings.C._TB_EUNSUPPORTED_TERMINAL) -> True)+  ((== Tb_init_error _TB_EUNSUPPORTED_TERMINAL) -> True)   where-    TB_EUNSUPPORTED_TERMINAL = Tb_init_error Termbox.Bindings.C._TB_EUNSUPPORTED_TERMINAL+    TB_EUNSUPPORTED_TERMINAL = Tb_init_error _TB_EUNSUPPORTED_TERMINAL +-- N.B. This requires Tb_init_error to remain abstract {-# COMPLETE TB_EFAILED_TO_OPEN_TTY, TB_EPIPE_TRAP_ERROR, TB_EUNSUPPORTED_TERMINAL #-}
src/Termbox/Bindings/Hs/Internal/InputMode.hs view
@@ -1,51 +1,41 @@ module Termbox.Bindings.Hs.Internal.InputMode-  ( Tb_input_mode-      ( Tb_input_mode,-        TB_INPUT_CURRENT,-        TB_INPUT_ALT,-        TB_INPUT_ESC,-        TB_INPUT_MOUSE-      ),+  ( Tb_input_mode (Tb_input_mode),+    _TB_INPUT_ALT,+    _TB_INPUT_ESC,+    _TB_INPUT_MOUSE,   ) where +import Data.Bits (Bits, (.|.))+import Data.Coerce (coerce) import Foreign.C.Types (CInt)-import qualified Termbox.Bindings.C+import qualified Termbox.Bindings.C as Termbox  -- | The input mode. newtype Tb_input_mode   = Tb_input_mode CInt-  deriving stock (Eq, Ord)+  deriving stock (Eq)+  deriving newtype (Bits)  instance Show Tb_input_mode where-  show = \case-    TB_INPUT_CURRENT -> "TB_INPUT_CURRENT"-    TB_INPUT_ALT -> "TB_INPUT_ALT"-    TB_INPUT_ESC -> "TB_INPUT_ESC"-    TB_INPUT_MOUSE -> "TB_INPUT_MOUSE"--pattern TB_INPUT_CURRENT :: Tb_input_mode-pattern TB_INPUT_CURRENT <--  ((== Tb_input_mode Termbox.Bindings.C._TB_INPUT_CURRENT) -> True)-  where-    TB_INPUT_CURRENT = Tb_input_mode Termbox.Bindings.C._TB_INPUT_CURRENT+  show mode+    | mode == _TB_INPUT_ESC = "_TB_INPUT_ESC"+    | mode == _TB_INPUT_ALT = "_TB_INPUT_ALT"+    | mode == _TB_INPUT_ESC <> _TB_INPUT_MOUSE = "_TB_INPUT_ESC <> _TB_INPUT_MOUSE"+    | mode == _TB_INPUT_ALT <> _TB_INPUT_MOUSE = "_TB_INPUT_ALT <> _TB_INPUT_MOUSE"+    | otherwise = "Tb_input_mode " ++ show (coerce @_ @CInt mode) -pattern TB_INPUT_ALT :: Tb_input_mode-pattern TB_INPUT_ALT <--  ((== Tb_input_mode Termbox.Bindings.C._TB_INPUT_ALT) -> True)-  where-    TB_INPUT_ALT = Tb_input_mode Termbox.Bindings.C._TB_INPUT_ALT+instance Semigroup Tb_input_mode where+  (<>) = coerce ((.|.) :: CInt -> CInt -> CInt) -pattern TB_INPUT_ESC :: Tb_input_mode-pattern TB_INPUT_ESC <--  ((== Tb_input_mode Termbox.Bindings.C._TB_INPUT_ESC) -> True)-  where-    TB_INPUT_ESC = Tb_input_mode Termbox.Bindings.C._TB_INPUT_ESC+_TB_INPUT_ALT :: Tb_input_mode+_TB_INPUT_ALT =+  Tb_input_mode Termbox._TB_INPUT_ALT -pattern TB_INPUT_MOUSE :: Tb_input_mode-pattern TB_INPUT_MOUSE <--  ((== Tb_input_mode Termbox.Bindings.C._TB_INPUT_MOUSE) -> True)-  where-    TB_INPUT_MOUSE = Tb_input_mode Termbox.Bindings.C._TB_INPUT_MOUSE+_TB_INPUT_ESC :: Tb_input_mode+_TB_INPUT_ESC =+  Tb_input_mode Termbox._TB_INPUT_ESC -{-# COMPLETE TB_INPUT_CURRENT, TB_INPUT_ALT, TB_INPUT_ESC, TB_INPUT_MOUSE #-}+_TB_INPUT_MOUSE :: Tb_input_mode+_TB_INPUT_MOUSE =+  Tb_input_mode Termbox._TB_INPUT_MOUSE
src/Termbox/Bindings/Hs/Internal/Key.hs view
@@ -79,7 +79,7 @@ where  import Data.Word (Word16)-import qualified Termbox.Bindings.C+import Termbox.Bindings.C  -- | A key. newtype Tb_key@@ -150,442 +150,442 @@     TB_KEY_CTRL_7 -> "TB_KEY_CTRL_7"     TB_KEY_SPACE -> "TB_KEY_SPACE"     TB_KEY_BACKSPACE2 -> "TB_KEY_BACKSPACE2"-    k -> error ("Unknown key: " ++ show k)+    Tb_key k -> "Tb_key " ++ show k  pattern TB_KEY_ARROW_DOWN :: Tb_key pattern TB_KEY_ARROW_DOWN <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_ARROW_DOWN) -> True)+  ((== Tb_key _TB_KEY_ARROW_DOWN) -> True)   where-    TB_KEY_ARROW_DOWN = Tb_key Termbox.Bindings.C._TB_KEY_ARROW_DOWN+    TB_KEY_ARROW_DOWN = Tb_key _TB_KEY_ARROW_DOWN  pattern TB_KEY_ARROW_LEFT :: Tb_key pattern TB_KEY_ARROW_LEFT <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_ARROW_LEFT) -> True)+  ((== Tb_key _TB_KEY_ARROW_LEFT) -> True)   where-    TB_KEY_ARROW_LEFT = Tb_key Termbox.Bindings.C._TB_KEY_ARROW_LEFT+    TB_KEY_ARROW_LEFT = Tb_key _TB_KEY_ARROW_LEFT  pattern TB_KEY_ARROW_RIGHT :: Tb_key pattern TB_KEY_ARROW_RIGHT <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_ARROW_RIGHT) -> True)+  ((== Tb_key _TB_KEY_ARROW_RIGHT) -> True)   where-    TB_KEY_ARROW_RIGHT = Tb_key Termbox.Bindings.C._TB_KEY_ARROW_RIGHT+    TB_KEY_ARROW_RIGHT = Tb_key _TB_KEY_ARROW_RIGHT  pattern TB_KEY_ARROW_UP :: Tb_key pattern TB_KEY_ARROW_UP <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_ARROW_UP) -> True)+  ((== Tb_key _TB_KEY_ARROW_UP) -> True)   where-    TB_KEY_ARROW_UP = Tb_key Termbox.Bindings.C._TB_KEY_ARROW_UP+    TB_KEY_ARROW_UP = Tb_key _TB_KEY_ARROW_UP  pattern TB_KEY_BACKSPACE :: Tb_key pattern TB_KEY_BACKSPACE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_BACKSPACE) -> True)+  ((== Tb_key _TB_KEY_BACKSPACE) -> True)   where-    TB_KEY_BACKSPACE = Tb_key Termbox.Bindings.C._TB_KEY_BACKSPACE+    TB_KEY_BACKSPACE = Tb_key _TB_KEY_BACKSPACE  pattern TB_KEY_BACKSPACE2 :: Tb_key pattern TB_KEY_BACKSPACE2 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_BACKSPACE2) -> True)+  ((== Tb_key _TB_KEY_BACKSPACE2) -> True)   where-    TB_KEY_BACKSPACE2 = Tb_key Termbox.Bindings.C._TB_KEY_BACKSPACE2+    TB_KEY_BACKSPACE2 = Tb_key _TB_KEY_BACKSPACE2  pattern TB_KEY_CTRL_2 :: Tb_key pattern TB_KEY_CTRL_2 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_2) -> True)+  ((== Tb_key _TB_KEY_CTRL_2) -> True)   where-    TB_KEY_CTRL_2 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_2+    TB_KEY_CTRL_2 = Tb_key _TB_KEY_CTRL_2  pattern TB_KEY_CTRL_3 :: Tb_key pattern TB_KEY_CTRL_3 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_3) -> True)+  ((== Tb_key _TB_KEY_CTRL_3) -> True)   where-    TB_KEY_CTRL_3 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_3+    TB_KEY_CTRL_3 = Tb_key _TB_KEY_CTRL_3  pattern TB_KEY_CTRL_4 :: Tb_key pattern TB_KEY_CTRL_4 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_4) -> True)+  ((== Tb_key _TB_KEY_CTRL_4) -> True)   where-    TB_KEY_CTRL_4 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_4+    TB_KEY_CTRL_4 = Tb_key _TB_KEY_CTRL_4  pattern TB_KEY_CTRL_5 :: Tb_key pattern TB_KEY_CTRL_5 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_5) -> True)+  ((== Tb_key _TB_KEY_CTRL_5) -> True)   where-    TB_KEY_CTRL_5 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_5+    TB_KEY_CTRL_5 = Tb_key _TB_KEY_CTRL_5  pattern TB_KEY_CTRL_6 :: Tb_key pattern TB_KEY_CTRL_6 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_6) -> True)+  ((== Tb_key _TB_KEY_CTRL_6) -> True)   where-    TB_KEY_CTRL_6 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_6+    TB_KEY_CTRL_6 = Tb_key _TB_KEY_CTRL_6  pattern TB_KEY_CTRL_7 :: Tb_key pattern TB_KEY_CTRL_7 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_7) -> True)+  ((== Tb_key _TB_KEY_CTRL_7) -> True)   where-    TB_KEY_CTRL_7 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_7+    TB_KEY_CTRL_7 = Tb_key _TB_KEY_CTRL_7  pattern TB_KEY_CTRL_8 :: Tb_key pattern TB_KEY_CTRL_8 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_8) -> True)+  ((== Tb_key _TB_KEY_CTRL_8) -> True)   where-    TB_KEY_CTRL_8 = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_8+    TB_KEY_CTRL_8 = Tb_key _TB_KEY_CTRL_8  pattern TB_KEY_CTRL_A :: Tb_key pattern TB_KEY_CTRL_A <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_A) -> True)+  ((== Tb_key _TB_KEY_CTRL_A) -> True)   where-    TB_KEY_CTRL_A = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_A+    TB_KEY_CTRL_A = Tb_key _TB_KEY_CTRL_A  pattern TB_KEY_CTRL_B :: Tb_key pattern TB_KEY_CTRL_B <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_B) -> True)+  ((== Tb_key _TB_KEY_CTRL_B) -> True)   where-    TB_KEY_CTRL_B = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_B+    TB_KEY_CTRL_B = Tb_key _TB_KEY_CTRL_B  pattern TB_KEY_CTRL_BACKSLASH :: Tb_key pattern TB_KEY_CTRL_BACKSLASH <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_BACKSLASH) -> True)+  ((== Tb_key _TB_KEY_CTRL_BACKSLASH) -> True)   where-    TB_KEY_CTRL_BACKSLASH = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_BACKSLASH+    TB_KEY_CTRL_BACKSLASH = Tb_key _TB_KEY_CTRL_BACKSLASH  pattern TB_KEY_CTRL_C :: Tb_key pattern TB_KEY_CTRL_C <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_C) -> True)+  ((== Tb_key _TB_KEY_CTRL_C) -> True)   where-    TB_KEY_CTRL_C = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_C+    TB_KEY_CTRL_C = Tb_key _TB_KEY_CTRL_C  pattern TB_KEY_CTRL_D :: Tb_key pattern TB_KEY_CTRL_D <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_D) -> True)+  ((== Tb_key _TB_KEY_CTRL_D) -> True)   where-    TB_KEY_CTRL_D = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_D+    TB_KEY_CTRL_D = Tb_key _TB_KEY_CTRL_D  pattern TB_KEY_CTRL_E :: Tb_key pattern TB_KEY_CTRL_E <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_E) -> True)+  ((== Tb_key _TB_KEY_CTRL_E) -> True)   where-    TB_KEY_CTRL_E = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_E+    TB_KEY_CTRL_E = Tb_key _TB_KEY_CTRL_E  pattern TB_KEY_CTRL_F :: Tb_key pattern TB_KEY_CTRL_F <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_F) -> True)+  ((== Tb_key _TB_KEY_CTRL_F) -> True)   where-    TB_KEY_CTRL_F = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_F+    TB_KEY_CTRL_F = Tb_key _TB_KEY_CTRL_F  pattern TB_KEY_CTRL_G :: Tb_key pattern TB_KEY_CTRL_G <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_G) -> True)+  ((== Tb_key _TB_KEY_CTRL_G) -> True)   where-    TB_KEY_CTRL_G = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_G+    TB_KEY_CTRL_G = Tb_key _TB_KEY_CTRL_G  pattern TB_KEY_CTRL_H :: Tb_key pattern TB_KEY_CTRL_H <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_H) -> True)+  ((== Tb_key _TB_KEY_CTRL_H) -> True)   where-    TB_KEY_CTRL_H = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_H+    TB_KEY_CTRL_H = Tb_key _TB_KEY_CTRL_H  pattern TB_KEY_CTRL_I :: Tb_key pattern TB_KEY_CTRL_I <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_I) -> True)+  ((== Tb_key _TB_KEY_CTRL_I) -> True)   where-    TB_KEY_CTRL_I = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_I+    TB_KEY_CTRL_I = Tb_key _TB_KEY_CTRL_I  pattern TB_KEY_CTRL_J :: Tb_key pattern TB_KEY_CTRL_J <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_J) -> True)+  ((== Tb_key _TB_KEY_CTRL_J) -> True)   where-    TB_KEY_CTRL_J = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_J+    TB_KEY_CTRL_J = Tb_key _TB_KEY_CTRL_J  pattern TB_KEY_CTRL_K :: Tb_key pattern TB_KEY_CTRL_K <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_K) -> True)+  ((== Tb_key _TB_KEY_CTRL_K) -> True)   where-    TB_KEY_CTRL_K = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_K+    TB_KEY_CTRL_K = Tb_key _TB_KEY_CTRL_K  pattern TB_KEY_CTRL_L :: Tb_key pattern TB_KEY_CTRL_L <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_L) -> True)+  ((== Tb_key _TB_KEY_CTRL_L) -> True)   where-    TB_KEY_CTRL_L = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_L+    TB_KEY_CTRL_L = Tb_key _TB_KEY_CTRL_L  pattern TB_KEY_CTRL_LSQ_BRACKET :: Tb_key pattern TB_KEY_CTRL_LSQ_BRACKET <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_LSQ_BRACKET) -> True)+  ((== Tb_key _TB_KEY_CTRL_LSQ_BRACKET) -> True)   where-    TB_KEY_CTRL_LSQ_BRACKET = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_LSQ_BRACKET+    TB_KEY_CTRL_LSQ_BRACKET = Tb_key _TB_KEY_CTRL_LSQ_BRACKET  pattern TB_KEY_CTRL_M :: Tb_key pattern TB_KEY_CTRL_M <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_M) -> True)+  ((== Tb_key _TB_KEY_CTRL_M) -> True)   where-    TB_KEY_CTRL_M = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_M+    TB_KEY_CTRL_M = Tb_key _TB_KEY_CTRL_M  pattern TB_KEY_CTRL_N :: Tb_key pattern TB_KEY_CTRL_N <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_N) -> True)+  ((== Tb_key _TB_KEY_CTRL_N) -> True)   where-    TB_KEY_CTRL_N = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_N+    TB_KEY_CTRL_N = Tb_key _TB_KEY_CTRL_N  pattern TB_KEY_CTRL_O :: Tb_key pattern TB_KEY_CTRL_O <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_O) -> True)+  ((== Tb_key _TB_KEY_CTRL_O) -> True)   where-    TB_KEY_CTRL_O = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_O+    TB_KEY_CTRL_O = Tb_key _TB_KEY_CTRL_O  pattern TB_KEY_CTRL_P :: Tb_key pattern TB_KEY_CTRL_P <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_P) -> True)+  ((== Tb_key _TB_KEY_CTRL_P) -> True)   where-    TB_KEY_CTRL_P = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_P+    TB_KEY_CTRL_P = Tb_key _TB_KEY_CTRL_P  pattern TB_KEY_CTRL_Q :: Tb_key pattern TB_KEY_CTRL_Q <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_Q) -> True)+  ((== Tb_key _TB_KEY_CTRL_Q) -> True)   where-    TB_KEY_CTRL_Q = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_Q+    TB_KEY_CTRL_Q = Tb_key _TB_KEY_CTRL_Q  pattern TB_KEY_CTRL_R :: Tb_key pattern TB_KEY_CTRL_R <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_R) -> True)+  ((== Tb_key _TB_KEY_CTRL_R) -> True)   where-    TB_KEY_CTRL_R = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_R+    TB_KEY_CTRL_R = Tb_key _TB_KEY_CTRL_R  pattern TB_KEY_CTRL_RSQ_BRACKET :: Tb_key pattern TB_KEY_CTRL_RSQ_BRACKET <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_RSQ_BRACKET) -> True)+  ((== Tb_key _TB_KEY_CTRL_RSQ_BRACKET) -> True)   where-    TB_KEY_CTRL_RSQ_BRACKET = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_RSQ_BRACKET+    TB_KEY_CTRL_RSQ_BRACKET = Tb_key _TB_KEY_CTRL_RSQ_BRACKET  pattern TB_KEY_CTRL_S :: Tb_key pattern TB_KEY_CTRL_S <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_S) -> True)+  ((== Tb_key _TB_KEY_CTRL_S) -> True)   where-    TB_KEY_CTRL_S = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_S+    TB_KEY_CTRL_S = Tb_key _TB_KEY_CTRL_S  pattern TB_KEY_CTRL_SLASH :: Tb_key pattern TB_KEY_CTRL_SLASH <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_SLASH) -> True)+  ((== Tb_key _TB_KEY_CTRL_SLASH) -> True)   where-    TB_KEY_CTRL_SLASH = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_SLASH+    TB_KEY_CTRL_SLASH = Tb_key _TB_KEY_CTRL_SLASH  pattern TB_KEY_CTRL_T :: Tb_key pattern TB_KEY_CTRL_T <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_T) -> True)+  ((== Tb_key _TB_KEY_CTRL_T) -> True)   where-    TB_KEY_CTRL_T = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_T+    TB_KEY_CTRL_T = Tb_key _TB_KEY_CTRL_T  pattern TB_KEY_CTRL_TILDE :: Tb_key pattern TB_KEY_CTRL_TILDE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_TILDE) -> True)+  ((== Tb_key _TB_KEY_CTRL_TILDE) -> True)   where-    TB_KEY_CTRL_TILDE = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_TILDE+    TB_KEY_CTRL_TILDE = Tb_key _TB_KEY_CTRL_TILDE  pattern TB_KEY_CTRL_U :: Tb_key pattern TB_KEY_CTRL_U <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_U) -> True)+  ((== Tb_key _TB_KEY_CTRL_U) -> True)   where-    TB_KEY_CTRL_U = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_U+    TB_KEY_CTRL_U = Tb_key _TB_KEY_CTRL_U  pattern TB_KEY_CTRL_UNDERSCORE :: Tb_key pattern TB_KEY_CTRL_UNDERSCORE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_UNDERSCORE) -> True)+  ((== Tb_key _TB_KEY_CTRL_UNDERSCORE) -> True)   where-    TB_KEY_CTRL_UNDERSCORE = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_UNDERSCORE+    TB_KEY_CTRL_UNDERSCORE = Tb_key _TB_KEY_CTRL_UNDERSCORE  pattern TB_KEY_CTRL_V :: Tb_key pattern TB_KEY_CTRL_V <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_V) -> True)+  ((== Tb_key _TB_KEY_CTRL_V) -> True)   where-    TB_KEY_CTRL_V = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_V+    TB_KEY_CTRL_V = Tb_key _TB_KEY_CTRL_V  pattern TB_KEY_CTRL_W :: Tb_key pattern TB_KEY_CTRL_W <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_W) -> True)+  ((== Tb_key _TB_KEY_CTRL_W) -> True)   where-    TB_KEY_CTRL_W = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_W+    TB_KEY_CTRL_W = Tb_key _TB_KEY_CTRL_W  pattern TB_KEY_CTRL_X :: Tb_key pattern TB_KEY_CTRL_X <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_X) -> True)+  ((== Tb_key _TB_KEY_CTRL_X) -> True)   where-    TB_KEY_CTRL_X = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_X+    TB_KEY_CTRL_X = Tb_key _TB_KEY_CTRL_X  pattern TB_KEY_CTRL_Y :: Tb_key pattern TB_KEY_CTRL_Y <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_Y) -> True)+  ((== Tb_key _TB_KEY_CTRL_Y) -> True)   where-    TB_KEY_CTRL_Y = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_Y+    TB_KEY_CTRL_Y = Tb_key _TB_KEY_CTRL_Y  pattern TB_KEY_CTRL_Z :: Tb_key pattern TB_KEY_CTRL_Z <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_CTRL_Z) -> True)+  ((== Tb_key _TB_KEY_CTRL_Z) -> True)   where-    TB_KEY_CTRL_Z = Tb_key Termbox.Bindings.C._TB_KEY_CTRL_Z+    TB_KEY_CTRL_Z = Tb_key _TB_KEY_CTRL_Z  pattern TB_KEY_DELETE :: Tb_key pattern TB_KEY_DELETE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_DELETE) -> True)+  ((== Tb_key _TB_KEY_DELETE) -> True)   where-    TB_KEY_DELETE = Tb_key Termbox.Bindings.C._TB_KEY_DELETE+    TB_KEY_DELETE = Tb_key _TB_KEY_DELETE  pattern TB_KEY_END :: Tb_key pattern TB_KEY_END <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_END) -> True)+  ((== Tb_key _TB_KEY_END) -> True)   where-    TB_KEY_END = Tb_key Termbox.Bindings.C._TB_KEY_END+    TB_KEY_END = Tb_key _TB_KEY_END  pattern TB_KEY_ENTER :: Tb_key pattern TB_KEY_ENTER <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_ENTER) -> True)+  ((== Tb_key _TB_KEY_ENTER) -> True)   where-    TB_KEY_ENTER = Tb_key Termbox.Bindings.C._TB_KEY_ENTER+    TB_KEY_ENTER = Tb_key _TB_KEY_ENTER  pattern TB_KEY_ESC :: Tb_key pattern TB_KEY_ESC <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_ESC) -> True)+  ((== Tb_key _TB_KEY_ESC) -> True)   where-    TB_KEY_ESC = Tb_key Termbox.Bindings.C._TB_KEY_ESC+    TB_KEY_ESC = Tb_key _TB_KEY_ESC  pattern TB_KEY_F1 :: Tb_key pattern TB_KEY_F1 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F1) -> True)+  ((== Tb_key _TB_KEY_F1) -> True)   where-    TB_KEY_F1 = Tb_key Termbox.Bindings.C._TB_KEY_F1+    TB_KEY_F1 = Tb_key _TB_KEY_F1  pattern TB_KEY_F10 :: Tb_key pattern TB_KEY_F10 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F10) -> True)+  ((== Tb_key _TB_KEY_F10) -> True)   where-    TB_KEY_F10 = Tb_key Termbox.Bindings.C._TB_KEY_F10+    TB_KEY_F10 = Tb_key _TB_KEY_F10  pattern TB_KEY_F11 :: Tb_key pattern TB_KEY_F11 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F11) -> True)+  ((== Tb_key _TB_KEY_F11) -> True)   where-    TB_KEY_F11 = Tb_key Termbox.Bindings.C._TB_KEY_F11+    TB_KEY_F11 = Tb_key _TB_KEY_F11  pattern TB_KEY_F12 :: Tb_key pattern TB_KEY_F12 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F12) -> True)+  ((== Tb_key _TB_KEY_F12) -> True)   where-    TB_KEY_F12 = Tb_key Termbox.Bindings.C._TB_KEY_F12+    TB_KEY_F12 = Tb_key _TB_KEY_F12  pattern TB_KEY_F2 :: Tb_key pattern TB_KEY_F2 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F2) -> True)+  ((== Tb_key _TB_KEY_F2) -> True)   where-    TB_KEY_F2 = Tb_key Termbox.Bindings.C._TB_KEY_F2+    TB_KEY_F2 = Tb_key _TB_KEY_F2  pattern TB_KEY_F3 :: Tb_key pattern TB_KEY_F3 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F3) -> True)+  ((== Tb_key _TB_KEY_F3) -> True)   where-    TB_KEY_F3 = Tb_key Termbox.Bindings.C._TB_KEY_F3+    TB_KEY_F3 = Tb_key _TB_KEY_F3  pattern TB_KEY_F4 :: Tb_key pattern TB_KEY_F4 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F4) -> True)+  ((== Tb_key _TB_KEY_F4) -> True)   where-    TB_KEY_F4 = Tb_key Termbox.Bindings.C._TB_KEY_F4+    TB_KEY_F4 = Tb_key _TB_KEY_F4  pattern TB_KEY_F5 :: Tb_key pattern TB_KEY_F5 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F5) -> True)+  ((== Tb_key _TB_KEY_F5) -> True)   where-    TB_KEY_F5 = Tb_key Termbox.Bindings.C._TB_KEY_F5+    TB_KEY_F5 = Tb_key _TB_KEY_F5  pattern TB_KEY_F6 :: Tb_key pattern TB_KEY_F6 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F6) -> True)+  ((== Tb_key _TB_KEY_F6) -> True)   where-    TB_KEY_F6 = Tb_key Termbox.Bindings.C._TB_KEY_F6+    TB_KEY_F6 = Tb_key _TB_KEY_F6  pattern TB_KEY_F7 :: Tb_key pattern TB_KEY_F7 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F7) -> True)+  ((== Tb_key _TB_KEY_F7) -> True)   where-    TB_KEY_F7 = Tb_key Termbox.Bindings.C._TB_KEY_F7+    TB_KEY_F7 = Tb_key _TB_KEY_F7  pattern TB_KEY_F8 :: Tb_key pattern TB_KEY_F8 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F8) -> True)+  ((== Tb_key _TB_KEY_F8) -> True)   where-    TB_KEY_F8 = Tb_key Termbox.Bindings.C._TB_KEY_F8+    TB_KEY_F8 = Tb_key _TB_KEY_F8  pattern TB_KEY_F9 :: Tb_key pattern TB_KEY_F9 <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_F9) -> True)+  ((== Tb_key _TB_KEY_F9) -> True)   where-    TB_KEY_F9 = Tb_key Termbox.Bindings.C._TB_KEY_F9+    TB_KEY_F9 = Tb_key _TB_KEY_F9  pattern TB_KEY_HOME :: Tb_key pattern TB_KEY_HOME <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_HOME) -> True)+  ((== Tb_key _TB_KEY_HOME) -> True)   where-    TB_KEY_HOME = Tb_key Termbox.Bindings.C._TB_KEY_HOME+    TB_KEY_HOME = Tb_key _TB_KEY_HOME  pattern TB_KEY_INSERT :: Tb_key pattern TB_KEY_INSERT <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_INSERT) -> True)+  ((== Tb_key _TB_KEY_INSERT) -> True)   where-    TB_KEY_INSERT = Tb_key Termbox.Bindings.C._TB_KEY_INSERT+    TB_KEY_INSERT = Tb_key _TB_KEY_INSERT  pattern TB_KEY_MOUSE_LEFT :: Tb_key pattern TB_KEY_MOUSE_LEFT <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_LEFT) -> True)+  ((== Tb_key _TB_KEY_MOUSE_LEFT) -> True)   where-    TB_KEY_MOUSE_LEFT = Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_LEFT+    TB_KEY_MOUSE_LEFT = Tb_key _TB_KEY_MOUSE_LEFT  pattern TB_KEY_MOUSE_MIDDLE :: Tb_key pattern TB_KEY_MOUSE_MIDDLE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_MIDDLE) -> True)+  ((== Tb_key _TB_KEY_MOUSE_MIDDLE) -> True)   where-    TB_KEY_MOUSE_MIDDLE = Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_MIDDLE+    TB_KEY_MOUSE_MIDDLE = Tb_key _TB_KEY_MOUSE_MIDDLE  pattern TB_KEY_MOUSE_RELEASE :: Tb_key pattern TB_KEY_MOUSE_RELEASE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_RELEASE) -> True)+  ((== Tb_key _TB_KEY_MOUSE_RELEASE) -> True)   where-    TB_KEY_MOUSE_RELEASE = Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_RELEASE+    TB_KEY_MOUSE_RELEASE = Tb_key _TB_KEY_MOUSE_RELEASE  pattern TB_KEY_MOUSE_RIGHT :: Tb_key pattern TB_KEY_MOUSE_RIGHT <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_RIGHT) -> True)+  ((== Tb_key _TB_KEY_MOUSE_RIGHT) -> True)   where-    TB_KEY_MOUSE_RIGHT = Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_RIGHT+    TB_KEY_MOUSE_RIGHT = Tb_key _TB_KEY_MOUSE_RIGHT  pattern TB_KEY_MOUSE_WHEEL_DOWN :: Tb_key pattern TB_KEY_MOUSE_WHEEL_DOWN <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_WHEEL_DOWN) -> True)+  ((== Tb_key _TB_KEY_MOUSE_WHEEL_DOWN) -> True)   where-    TB_KEY_MOUSE_WHEEL_DOWN = Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_WHEEL_DOWN+    TB_KEY_MOUSE_WHEEL_DOWN = Tb_key _TB_KEY_MOUSE_WHEEL_DOWN  pattern TB_KEY_MOUSE_WHEEL_UP :: Tb_key pattern TB_KEY_MOUSE_WHEEL_UP <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_WHEEL_UP) -> True)+  ((== Tb_key _TB_KEY_MOUSE_WHEEL_UP) -> True)   where-    TB_KEY_MOUSE_WHEEL_UP = Tb_key Termbox.Bindings.C._TB_KEY_MOUSE_WHEEL_UP+    TB_KEY_MOUSE_WHEEL_UP = Tb_key _TB_KEY_MOUSE_WHEEL_UP  pattern TB_KEY_PGDN :: Tb_key pattern TB_KEY_PGDN <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_PGDN) -> True)+  ((== Tb_key _TB_KEY_PGDN) -> True)   where-    TB_KEY_PGDN = Tb_key Termbox.Bindings.C._TB_KEY_PGDN+    TB_KEY_PGDN = Tb_key _TB_KEY_PGDN  pattern TB_KEY_PGUP :: Tb_key pattern TB_KEY_PGUP <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_PGUP) -> True)+  ((== Tb_key _TB_KEY_PGUP) -> True)   where-    TB_KEY_PGUP = Tb_key Termbox.Bindings.C._TB_KEY_PGUP+    TB_KEY_PGUP = Tb_key _TB_KEY_PGUP  pattern TB_KEY_SPACE :: Tb_key pattern TB_KEY_SPACE <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_SPACE) -> True)+  ((== Tb_key _TB_KEY_SPACE) -> True)   where-    TB_KEY_SPACE = Tb_key Termbox.Bindings.C._TB_KEY_SPACE+    TB_KEY_SPACE = Tb_key _TB_KEY_SPACE  pattern TB_KEY_TAB :: Tb_key pattern TB_KEY_TAB <--  ((== Tb_key Termbox.Bindings.C._TB_KEY_TAB) -> True)+  ((== Tb_key _TB_KEY_TAB) -> True)   where-    TB_KEY_TAB = Tb_key Termbox.Bindings.C._TB_KEY_TAB+    TB_KEY_TAB = Tb_key _TB_KEY_TAB
src/Termbox/Bindings/Hs/Internal/OutputMode.hs view
@@ -1,7 +1,6 @@ module Termbox.Bindings.Hs.Internal.OutputMode   ( Tb_output_mode       ( Tb_output_mode,-        TB_OUTPUT_CURRENT,         TB_OUTPUT_216,         TB_OUTPUT_256,         TB_OUTPUT_GRAYSCALE,@@ -11,49 +10,48 @@ where  import Foreign.C.Types (CInt)-import qualified Termbox.Bindings.C+import Termbox.Bindings.C+  ( _TB_OUTPUT_216,+    _TB_OUTPUT_256,+    _TB_OUTPUT_GRAYSCALE,+    _TB_OUTPUT_NORMAL,+  )  -- | The output mode. newtype Tb_output_mode   = Tb_output_mode CInt-  deriving stock (Eq, Ord)+  deriving stock (Eq)  instance Show Tb_output_mode where   show = \case-    TB_OUTPUT_CURRENT -> "TB_OUTPUT_CURRENT"     TB_OUTPUT_216 -> "TB_OUTPUT_216"     TB_OUTPUT_256 -> "TB_OUTPUT_256"     TB_OUTPUT_GRAYSCALE -> "TB_OUTPUT_GRAYSCALE"     TB_OUTPUT_NORMAL -> "TB_OUTPUT_NORMAL" -pattern TB_OUTPUT_CURRENT :: Tb_output_mode-pattern TB_OUTPUT_CURRENT <--  ((== Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_CURRENT) -> True)-  where-    TB_OUTPUT_CURRENT = Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_CURRENT- pattern TB_OUTPUT_216 :: Tb_output_mode pattern TB_OUTPUT_216 <--  ((== Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_216) -> True)+  ((== Tb_output_mode _TB_OUTPUT_216) -> True)   where-    TB_OUTPUT_216 = Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_216+    TB_OUTPUT_216 = Tb_output_mode _TB_OUTPUT_216  pattern TB_OUTPUT_256 :: Tb_output_mode pattern TB_OUTPUT_256 <--  ((== Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_256) -> True)+  ((== Tb_output_mode _TB_OUTPUT_256) -> True)   where-    TB_OUTPUT_256 = Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_256+    TB_OUTPUT_256 = Tb_output_mode _TB_OUTPUT_256  pattern TB_OUTPUT_GRAYSCALE :: Tb_output_mode pattern TB_OUTPUT_GRAYSCALE <--  ((== Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_GRAYSCALE) -> True)+  ((== Tb_output_mode _TB_OUTPUT_GRAYSCALE) -> True)   where-    TB_OUTPUT_GRAYSCALE = Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_GRAYSCALE+    TB_OUTPUT_GRAYSCALE = Tb_output_mode _TB_OUTPUT_GRAYSCALE  pattern TB_OUTPUT_NORMAL :: Tb_output_mode pattern TB_OUTPUT_NORMAL <--  ((== Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_NORMAL) -> True)+  ((== Tb_output_mode _TB_OUTPUT_NORMAL) -> True)   where-    TB_OUTPUT_NORMAL = Tb_output_mode Termbox.Bindings.C._TB_OUTPUT_NORMAL+    TB_OUTPUT_NORMAL = Tb_output_mode _TB_OUTPUT_NORMAL -{-# COMPLETE TB_OUTPUT_CURRENT, TB_OUTPUT_216, TB_OUTPUT_256, TB_OUTPUT_GRAYSCALE, TB_OUTPUT_NORMAL #-}+-- N.B. This requires Tb_output_mode to remain abstract+{-# COMPLETE TB_OUTPUT_216, TB_OUTPUT_256, TB_OUTPUT_GRAYSCALE, TB_OUTPUT_NORMAL #-}
termbox-bindings-hs.cabal view
@@ -20,7 +20,7 @@ name: termbox-bindings-hs synopsis: termbox bindings tested-with: GHC == 9.4.7, GHC == 9.6.3, GHC == 9.8.1-version: 0.1.1+version: 1.0.0  extra-doc-files:   CHANGELOG.md@@ -36,7 +36,8 @@     termbox-bindings-c ^>= 0.1,   default-extensions:     BlockArguments-    DeriveGeneric,+    DeriveAnyClass+    DeriveGeneric     DerivingStrategies     DuplicateRecordFields     GeneralizedNewtypeDeriving@@ -65,9 +66,8 @@     ghc-options:       -Wno-missing-kind-signatures   other-modules:-    Termbox.Bindings.Hs.Internal.Attr+    Termbox.Bindings.Hs.Internal.Attrs     Termbox.Bindings.Hs.Internal.Cell-    Termbox.Bindings.Hs.Internal.Color     Termbox.Bindings.Hs.Internal.Event     Termbox.Bindings.Hs.Internal.EventMod     Termbox.Bindings.Hs.Internal.EventType