module Termbox.Bindings.Hs.Internal.EventMod
  ( Tb_event_mod
      ( Tb_event_mod,
        TB_MOD_ALT,
        TB_MOD_MOTION
      ),
  )
where

import Data.Word (Word8)
import qualified Termbox.Bindings.C

-- | An event modifier.
newtype Tb_event_mod
  = Tb_event_mod Word8
  deriving stock (Tb_event_mod -> Tb_event_mod -> Bool
(Tb_event_mod -> Tb_event_mod -> Bool)
-> (Tb_event_mod -> Tb_event_mod -> Bool) -> Eq Tb_event_mod
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Tb_event_mod -> Tb_event_mod -> Bool
== :: Tb_event_mod -> Tb_event_mod -> Bool
$c/= :: Tb_event_mod -> Tb_event_mod -> Bool
/= :: Tb_event_mod -> Tb_event_mod -> Bool
Eq)

instance Show Tb_event_mod where
  show :: Tb_event_mod -> String
show = \case
    Tb_event_mod
TB_MOD_ALT -> String
"TB_MOD_ALT"
    Tb_event_mod
TB_MOD_MOTION -> String
"TB_MOD_MOTION"

pattern TB_MOD_ALT :: Tb_event_mod
pattern $mTB_MOD_ALT :: forall {r}. Tb_event_mod -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_MOD_ALT :: Tb_event_mod
TB_MOD_ALT <-
  ((== Tb_event_mod Termbox.Bindings.C._TB_MOD_ALT) -> True)
  where
    TB_MOD_ALT = Word8 -> Tb_event_mod
Tb_event_mod Word8
Termbox.Bindings.C._TB_MOD_ALT

pattern TB_MOD_MOTION :: Tb_event_mod
pattern $mTB_MOD_MOTION :: forall {r}. Tb_event_mod -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_MOD_MOTION :: Tb_event_mod
TB_MOD_MOTION <-
  ((== Tb_event_mod Termbox.Bindings.C._TB_MOD_MOTION) -> True)
  where
    TB_MOD_MOTION = Word8 -> Tb_event_mod
Tb_event_mod Word8
Termbox.Bindings.C._TB_MOD_MOTION

-- N.B. This requires Tb_event_mod to remain abstract
{-# COMPLETE TB_MOD_ALT, TB_MOD_MOTION #-}